我正在尝试使用类Node创建一个Node对象:
int main(){
for(int i=0; i< 20; i++)
Node *handle = new Node(i, 10);
}
class Node{
public:
static vector<Node> map;
static int totalNodes;
vector<Node> connections;
int NodeID;
Node(int ID, int weight){
NodeID = ID;
CreateConnections(weight);
totalNodes++;
map.push_back(*this);
}
出于某种原因,我得到了
'Node' : undeclared identifier
'Node' handle : undeclared identifier
syntax error : identifier node
课程结束后向下移动main()
unresolved external symbol
for Node::map and Node::totalNodes
我对C ++有些新意,所以任何提示都会受到赞赏。
答案 0 :(得分:5)
你必须用;
结束你的班级定义 class Node
{
//....
map.push_back(*this);
}; //^^^Cannot miss ;
同时,您需要在Node
之前声明main
。
另一点:
Node(int ID, int weight){
NodeID = ID;
CreateConnections(weight);
totalNodes++;
map.push_back(*this);
}//missing closing } on constructor definition
您对map
和totalNodes
的未定义引用的原因是:
类的静态成员必须在类外初始化。因此,当内联构造函数尝试访问它们时,它们不会被定义。所以你有未定义的参考。
您应该执行以下操作:
class Node{
public:
static vector<Node> map;
static int totalNodes;
vector<Node> connections;
int NodeID;
Node(int ID);
};
int Node::totalNodes = 0; //definition of static variables
vector<Node> Node::map;
//^^^define constructor outside class body
Node::Node(int ID){ //your second parameter for ctor not used, so remove it
NodeID = ID;
totalNodes++;
map.push_back(*this);
}
答案 1 :(得分:3)
您在使用后声明Node
。只需在main
之前移动声明就可以了:
class Node { ... };
int main() { ... }
您还可以对该类执行forward-declaration(没有定义的标识符声明):
class Node;
int main() { ... }
class Node { ... };
答案 2 :(得分:1)
您需要在主要使用位置之前放置Node声明 仅提出声明是不够的,因为main中的新Node需要声明Node 对于未解析的外部,您需要定义Node :: totalNodes
int Node::totalNodes = 0;
答案 3 :(得分:1)
您需要执行Node
的转发声明
class Node;
int main(){
for(int i=0; i< 20; i++)
Node *handle = new Node(i, 10);
}
class Node { }; //impelementation
或在定义main
后放置class Node
。
答案 4 :(得分:1)
只需为第一行打开以下行:
class Node;