0

クラスの静的メンバーのリンカー エラーの解決策を見つけようとしています。

コードは次のとおりです。

//node.h
class Node{

public:

static vector<Node*> nodePointers; //i will use these pointers to access multiple objects of the same class
int id;
int a;
int b;

friend int add(Node*,int);

void itsMyLife(int);
Node();
};

//node.cpp
void Node::itsMyLife(int x){

int answer=0;
if(nodePointers[x]->a<100){
    answer=add(this,nodePointers[x]->id);
}

cout<<"Answer in node "<<id<<" is "<<answer<<endl;

}

int add(Node* x, int y){

return x->a+x->nodePointers[y]->b;
}

//main.cpp
int* myInts=new int[10];
vector<int*> intVectors;
for(int i=0;i<10;i++)
    intVectors[i]=&myInts[i];

Node* myNodes=new Node[2];

for(int i=0;i<2;i++)
    myNodes[0].nodePointers[i]=&myNodes[i];

myNodes[0].id=0;
myNodes[0].a=10;

コンパイルしてリンクすると、次のエラーが表示されます。

Node::nodePointers への未定義の参照

このエラーが発生するのはなぜですか? 私はあなたの助けに感謝します。再度、感謝します。

4

1 に答える 1

0

静的クラス メンバーは、(1)1 回 (2)クラス定義の外で初期化する必要があります。通常、これに最適な場所は、関連する .cpp ファイルです。

つまり、次のようなものを node.cpp に追加する必要があります。

vector<Node*> Node::nodePointers;
于 2013-05-24T21:41:10.410 に答える