Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类的静态成员的链接器错误_C++_Linker Errors_Static Members - Fatal编程技术网

C++ 类的静态成员的链接器错误

C++ 类的静态成员的链接器错误,c++,linker-errors,static-members,C++,Linker Errors,Static Members,我正在尝试为类的静态成员找到链接器错误的解决方案 代码如下: //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); No

我正在尝试为类的静态成员找到链接器错误的解决方案

代码如下:

//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.h
类节点{
公众:
静态向量nodePointers;//我将使用这些指针访问同一类的多个对象
int-id;
INTA;
int b;
友元整数加法(节点*,整数);
使我的生命无效(int);
Node();
};
//node.cpp
void节点::itsMyLife(int x){
int-answer=0;
if(nodePointers[x]->aid);
}

cout静态类成员应在类定义之外初始化一次(2)。通常最好的地方是相关的.cpp文件

换句话说,您应该在node.cpp中添加类似的内容:

vector<Node*> Node::nodePointers;
vector节点::nodePointers;

“静态数据成员必须在类之外的单个转换单元中定义”部分指向“=vector()”部分?感谢leo,它删除了未定义的引用错误。你知道为什么上面的代码会导致“分段错误”吗?@LuchianGrigore说得对。Java习惯用语。已修复。@user2105632可能是由于没有为
intVectors
中的元素分配足够的空间而导致崩溃。请参阅有关如何执行此操作的文档: