• ベストアンサー

配列の操作時に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++です。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> static int test[8][8]; > static int test1[8]; これの実体がないとか。 クラス定義の中に書くだけじゃ、static なメンバーの実体は作られませんよ。

onnobu
質問者

お礼

ありがとうございます。 解決できました。 クラスのグローバル変数として処理をせずに、 全体のグローバル変数として処理するようにしました。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.3

なんかこれだけ見るとむちゃくちゃなんですけど、 本当にこんなソースなんですか? リンクに行く前にコンパイルエラーになると思うんだけど。 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' : 定義されていない識別子です。

onnobu
質問者

補足

すみません。 書き間違っていました。 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)
回答No.2

void test() { test[0][0] = 0; test1[0] = 0; } ではグローバルネームスペースのtest及びtest1を参照することになってしまいます。 testクラスの中身を参照したいのでしたら test::test1 などのようにネームスペースの指定を行わないとだめでしょう。 そもそも論として、クラスと同じ名前の配列や、クラスと同じ名前の関数は定義できないと思いますが……。

onnobu
質問者

補足

すみません。 書き間違っていました。 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)
回答No.1

ヘッダファイルにて宣言している static int set_test(); というメソッドは実在しているのでしょうか?

関連するQ&A