2009-10-14 22 views
5

Tôi đang sử dụng __declspec (dllimport/xuất khẩu) trên một phiên bản sửa lỗi mới như vậy:'điều hành mới': định nghĩa lại, liên kết khác nhau (sử dụng _dllspec vào nhà điều hành mới định nghĩa lại)

#ifdef _DEBUG 
DECLSPECCORE extern void* operator new(unsigned int size, const char* file, int line); 
extern void* operator new[](unsigned int size, const char* file, int line); 
extern void operator delete(void* address, const char* file, int line); 
extern void operator delete[](void* address, const char* file, int line); 
extern void Delete(void* address); 

#define LUDO_NEW new(__FILE__, __LINE__) 
#define LUDO_DELETE delete 

#endif 

này đang gây ra cho tôi để nhận được

lỗi C2375: 'toán tử mới': xác định lại; liên kết khác nhau.

Tại sao điều này và cách bạn khắc phục? Đây là dự án duy nhất mà tôi đang biên soạn ngay bây giờ.

Trả lời

0

Nếu bạn có hai nguyên mẫu quá tải toán tử mới, bạn phải xuất cả hai. Hopefulyl đó là vấn đề của bạn.

2

Bản thân thời gian chạy C++ cung cấp operator new, không được đánh dấu là DECLSPECCORE - do đó "liên kết khác", bản gốc không được nhập từ mô-đun khác. Nếu bạn định ghi đè operator new, nó sẽ có cùng một liên kết như trước đây.

0

Mã của bạn đang nói rằng bạn muốn "toán tử mới" của C++ được xuất dưới dạng hàm có thể gọi từ bên ngoài DLL. Giả sử điều đó thậm chí có thể (có thể không): Bạn có chắc đó là điều bạn muốn làm không?

0

Một giải pháp có thể là di chuyển toán tử mới và xóa đến không gian tên riêng của nó. tất cả các loại trong không gian tên đó phải sử dụng toán tử mới và xóa của vùng tên đó.

Các vấn đề liên quan