2013-05-24 2 views
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; 

Когда я компилирую и связь он дает мне ошибку:

неопределенная ссылка на узел :: nodePointers

Почему я получаю эту ошибку? Буду признателен за вашу помощь. Еще раз спасибо.

+0

http://stackoverflow.com/a/12574407/673730 - в «статические данные должны быть определены вне класса в одной единице перевода "часть –

ответ

0

Статические классы должны быть инициализированы (1) один раз (2) за пределами определения класса. Обычно лучшим местом для этого является соответствующий файл .cpp.

Другими словами, вы должны добавить что-то вроде этого, чтобы ваш node.cpp:

vector<Node*> Node::nodePointers; 
+0

Есть ли точка для' = vector () 'part? –

+0

Спасибо leo, он удалил неопределенную ошибку ссылки. Любая идея, почему вышеуказанный код может вызвать «ошибку сегментации»? – user2105632

+0

@LuchianGrigore хорошо пункт. Java habbit. Исправлена. –

Смежные вопросы