- ベストアンサー
配列の操作時にLNK2001外部シンボルが未解決がでてしまいます。
test.hにて class test{ public: static int test[8][8]; static int test1[8]; public: static int set_test(); } を定義して test.cppで void test(){ test[0][0] = 0; test1[0] = 0; } とすると LNK1120: 外部参照 1 が未解決です。 LNK2001外部シンボルが未解決です。 となってしまいます。 環境は Visual Studio 2005 C++です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> static int test[8][8]; > static int test1[8]; これの実体がないとか。 クラス定義の中に書くだけじゃ、static なメンバーの実体は作られませんよ。
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
なんかこれだけ見るとむちゃくちゃなんですけど、 本当にこんなソースなんですか? リンクに行く前にコンパイルエラーになると思うんだけど。 c:\tmp\test.h(3) : error C2380: 前の型 'test' (コンストラクタが戻り値を 返すか、またはクラス名を再定義しています。) c:\tmp\test.h(3) : error C3400: '文字列': 予期しないトークンや文字が属性 ブロックに見つかりました。 c:\tmp\test.h(3) : error C3400: '文字列': 予期しないトークンや文字が属性 ブロックに見つかりました。 c:\tmp\test.h(3) : error C2059: 構文エラー : ';' c:\tmp\test.h(3) : error C2238: ';' の前に無効なトークンがあります。 test.cpp(3) : error C2628: 'test' の後に 'void' を記述するのは正しくありません ( ';' で区切られていない可能性があります)。 test.cpp(4) : error C2109: 配列または、ポインタでない変数に添字が使われました。 test.cpp(5) : error C2065: 'test1' : 定義されていない識別子です。
補足
すみません。 書き間違っていました。 test.h class TEST{ public: static int test[8][8]; static int test1[2]; public: void set_test(); }; test.cpp #include "test.h" void TEST::set_test(){ test[0][0] = 0; test1[0] = 0; } でした。 すみませんでした。 void TEST::set_test(){ TEST::test[0][0] = 0; TEST::test1[0] = 0; }
- i-kujou
- ベストアンサー率50% (13/26)
void test() { test[0][0] = 0; test1[0] = 0; } ではグローバルネームスペースのtest及びtest1を参照することになってしまいます。 testクラスの中身を参照したいのでしたら test::test1 などのようにネームスペースの指定を行わないとだめでしょう。 そもそも論として、クラスと同じ名前の配列や、クラスと同じ名前の関数は定義できないと思いますが……。
補足
すみません。 書き間違っていました。 test.h class TEST{ public: static int test[8][8]; static int test1[2]; public: void set_test(); }; test.cpp #include "test.h" void TEST::set_test(){ test[0][0] = 0; test1[0] = 0; } でした。 すみませんでした。 void TEST::set_test(){ TEST::test[0][0] = 0; TEST::test1[0] = 0; } ネームスペースの指定をしても同じエラーがでてしまっています。
- Apr2nd
- ベストアンサー率69% (36/52)
ヘッダファイルにて宣言している static int set_test(); というメソッドは実在しているのでしょうか?
お礼
ありがとうございます。 解決できました。 クラスのグローバル変数として処理をせずに、 全体のグローバル変数として処理するようにしました。