Visual Studio 2010 と C++ で奇妙な動作が発生しています。いくつかのグローバル定数を宣言するヘッダー ファイルがあります。
#ifndef CONSTANTS_H
#define CONSTANTS_H
#define WIN32_LEAN_AND_MEAN
// Macros...
#define SAFE_RELEASE(ptr) { if (ptr) { ptr->Release(); ptr = NULL } }
#define SAFE_DELETE(ptr) { if (ptr) { delete ptr; ptr = NULL; } }
// Constants...
const char* CLASS_NAME = "WinMain";
const char GAME_TITLE[] = "DirectX Window";
const int GAME_WIDTH = 640;
const int GAME_HEIGHT = 480;
#endif
私の問題は次の行にあります。
const char* CLASS_NAME = "WinMain";
このような状況でソリューションをビルドすると、次の 2 つのエラーが発生します。
error LNK1169: one or more multiply defined symbols found
、 と
error LNK2005: "char const * const CLASS_NAME" (?CLASS_NAME@@3PBDB) already defined in graphics.obj
「ファイル内の検索」を実行したため、今は奇妙です。私は間違いなく他の場所で宣言していません。つまり、重複した宣言はありません。
次のように変更する必要があります。
const char* const CLASS_NAME = "WinMain";
また
const char CLASS_NAME[] = "WinMain";
それはうまくコンパイルされます!しかし、私が知る限り、char* x
は と同等char x[]
であり、ポインターとポイント先の値の両方に「const-ness」を適用しているという事実は違いがないはずです....それともそうですか?
私は Windows プラットフォームでの C++ 開発に少し慣れていないので、どんな助けでも大歓迎です!