cuốn sách gpt4 ai đã làm

Cách sử dụng vectơ con trỏ duy nhất trong lớp xuất dll bằng Visual Studio

In lại Tác giả: Hồ Xil Thời gian cập nhật: 2023-11-01 16:34:22 25 4
mua khóa gpt4 Nike

một ví dụ đơn giản

lớp __declspec(dllexport) A
{
public:
vector<>> v;
};

Lỗi biên dịch VS2013 duy nhất_ptr hàm tạo bản sao đã bị xóa. Nếu tôi xóa. __declspec(dllexport) , khỏe. Nếu tôi chỉ sử dụng duy nhất_ptr v , cũng rất tốt. Đây có phải là lỗi trình biên dịch không? Có cách nào để giải quyết điều này? Cảm ơn.

bạn có thể http://webcompiler.cloudapp.net/ Mã hoàn chỉnh cho bản dùng thử như sau

#include 
#include
#include
using namespace std;

lớp __declspec(dllexport) A
{
public:
vector<>> v;
};

int main()
{
cout << "Xin chào thế giới" << endl;
}

tạo ra lỗi trình biên dịch:

Biên soạn với /EHsc /nologo /W4 /c
chính.cpp
main.cpp(9): cảnh báo C4251: 'A::v': class 'std::vector<>>,std::allocator>>>' cần có giao diện dll để khách hàng lớp 'A' sử dụng
with
[
_Ty=int
]
c:\tools_root\cl\inc\xutility(2144): lỗi C2280: 'std::unique_ptr> &std::unique_ptr<_Ty,std::default_delete<_Ty>>:: toán tử =(const std::unique_ptr<_Ty,std::default_delete<_Ty>> &)': cố gắng tham chiếu một hàm đã bị xóa
with
[
_Ty=int
]
c:\tools_root\cl\inc\memory(1430): lưu ý: xem khai báo 'std::unique_ptr>::operator ='
with
[
_Ty=int
]
c:\tools_root\cl\inc\xutility(2165): lưu ý: xem tham chiếu đến việc khởi tạo mẫu hàm '_OutIt std::_Copy_impl<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::_Nonscalar_ptr_iterator_tag)' đang được biên dịch
with
[
_OutIt=std::unique_ptr<>> *,
_InIt=std::unique_ptr<>> *
]
c:\tools_root\cl\inc\vector(973): lưu ý: xem tài liệu tham khảo về khởi tạo mẫu hàm '_OutIt std::_Copy_impl<>>,std::unique_ptr< _Ty,std::default_delete<_Ty>>*>(_InIt,_InIt,_OutIt)' đang diễn ra biên soạn
with
[
_OutIt=std::unique_ptr<>> *,
_Ty=int,
_InIt=std::unique_ptr<>> *
]
c:\tools_root\cl\inc\vector(956): lưu ý: trong khi biên dịch hàm thành viên mẫu lớp 'std::vector<>>,std::allocator>>> &std::vector>,std::allocator>>>::operator =(const std::vector>,std::allocator>>> &)'
with
[
_Ty=int
]
main.cpp(10): lưu ý: xem tham chiếu đến khởi tạo mẫu hàm 'std::vector<>>,std::allocator>>> &std::vector>,std::allocator>>>::operator =(const std::vector>,std::allocator>>> &)' đang được biên dịch
with
[
_Ty=int
]
main.cpp(9): lưu ý: xem tham chiếu đến khởi tạo mẫu lớp 'std::vector<>>,std::allocator>>>' đang được biên dịch
with
[
_Ty=int
]

câu trả lời hay nhất

có vẻ như đang thêm __declspec(dllexport)Buộc trình biên dịch xác định hàm tạo sao chép được khai báo ngầm và toán tử gán sao chép (thông thường, điều này chỉ xảy ra khi chúng được sử dụng). Những lần lượt gọi v Hàm tạo bản sao/toán tử gán. .Nhưngstd::vectorThao tác sao chép đối với trường hợp không thể sao chép T Các lỗi định dạng như std::unique_ptr .do đó có lỗi.

Khi một thành viên tình cờstd::unique_ptrKhi , sự cố không xảy ra vì nó loại bỏ thao tác sao chép một cách rõ ràng, do đó MỘT Thao tác sao chép mặc định cũng đã bị loại bỏ.

Vì vậy, nếu bạn loại bỏ thao tác sao chép một cách rõ ràng, vấn đề sẽ được giải quyết:

lớp __declspec(dllexport) A
{
public:
A(const A&) = xóa;
Toán tử A&=(const A&) = xóa;
vector<>> v;
};

Tất nhiên, nếu bạnmuốnSao chép các hàm và tự xác định chúng cũng sẽ hữu ích.

Về c++ - Cách sử dụng vectơ con trỏ duy nhất trong lớp xuất dll bằng Visual Studio, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/29565299/

25 4 0
Hồ Xil
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress