2009-10-14 7 views
5

私は、次のような新しいのデバッグバージョンに__declspec(dllimportの/エクスポート)を使用しています:「演算子新しい」:再定義、異なるリンケージ(再定義された新しい演算子に_dllspec使用)

#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 

これはに私を引き起こしていますget

エラーC2375: 'operator new': redefinition;異なるリンケージ。

なぜこれを修正できますか?これは私が現在編集している唯一のプロジェクトです。

答えて

0

2つのプロトタイプに2つの新しい演算子をオーバーロードする場合は、両方をエクスポートする必要があります。ホープフリルはあなたの問題です。

2

operator newは、DECLSPECCOREとマークされていないため、別のモジュールからインポートされたものではありません。 operator newを無効にする場合は、前と同じリンケージが必要です。

0

あなたのコードは、C++の "演算子new"をDLLの外部から関数呼び出し可能にエクスポートしたいと言っています。それも可能であると仮定します(恐らくそうではありません):それはあなたがしたいことですか?

0

可能な解決策は、new演算子とdelete演算子をそれ自身の名前空間に移動することです。 その名前空間のすべての型は、その名前空間のnew演算子とdelete演算子を使うべきです。

関連する問題