アプリ版:「スタンプのみでお礼する」機能のリリースについて

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++です。

A 回答 (4件)

> static int test[8][8];


> static int test1[8];

これの実体がないとか。
クラス定義の中に書くだけじゃ、static なメンバーの実体は作られませんよ。
    • good
    • 0
この回答へのお礼

ありがとうございます。
解決できました。

クラスのグローバル変数として処理をせずに、
全体のグローバル変数として処理するようにしました。

お礼日時:2008/05/22 13:29

なんかこれだけ見るとむちゃくちゃなんですけど、


本当にこんなソースなんですか?

リンクに行く前にコンパイルエラーになると思うんだけど。

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;
}

補足日時:2008/05/22 12:00
    • good
    • 0

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;
}

ネームスペースの指定をしても同じエラーがでてしまっています。

補足日時:2008/05/22 11:54
    • good
    • 0

ヘッダファイルにて宣言している



static int set_test();

というメソッドは実在しているのでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!