1

我正在尝试使用类 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++ 有点陌生,所以任何提示都将不胜感激。

4

5 回答 5

5

你必须用 ; 结束你的类定义。

 class Node
 {
    //....
    map.push_back(*this);
 };  //^^^Cannot miss ;

同时,您需要将Nodebefore声明main

还有一点:

 Node(int ID, int weight){
     NodeID = ID;
     CreateConnections(weight);
     totalNodes++;
     map.push_back(*this);
 }//missing closing } on constructor definition

您对mapand的引用未定义的原因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);
}
于 2013-04-13T18:29:51.777 回答
3

Node在使用后声明。只需将声明移到 the 之前main,您应该会很好:

class Node { ... };
int main() { ... }

您还可以对类进行前向声明(声明没有定义的标识符):

class Node;
int main() { ... }
class Node { ... };
于 2013-04-13T18:30:54.127 回答
1

您需要将 Node 声明放在使用它的 main 之前。
仅仅提出声明是不够的,因为 main 中的新节点需要声明节点。
至于未解析的外部,需要定义Node::totalNodes

int Node::totalNodes = 0;
于 2013-04-13T18:29:44.747 回答
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

于 2013-04-13T18:31:08.603 回答
1

只需在第一行添加以下行:

class Node;
于 2013-04-13T18:31:25.140 回答