struct没有名为的成员

时间:2014-06-13 17:15:59

标签: c++ linked-list static-members static-variables

我试图创建一个跟踪节点数量的链表。我创建了一个静态变量numNodes,我在构造函数中递增,并尝试在deleteNode()函数中递减。但是,我收到以下错误:

quest.cpp: In member function 'void List::deleteNode()':
quest.cpp:25: error: 'struct List::node' has no member named 'numNodes'

这适用于普通变量,但我似乎无法访问静态变量。我读了here我需要用

之类的东西来声明变量
int node::numNodes = 0;

但是将其插入程序会给我带来其他错误。

第6行:

/tmp//ccrjmtbc.o: In function `List::deleteNode()':
quest.cpp:(.text._ZN4List10deleteNodeEv[List::deleteNode()]+0xe): undefined reference to `List::node::numNodes'
quest.cpp:(.text._ZN4List10deleteNodeEv[List::deleteNode()]+0x17): undefined reference to `List::node::numNodes'
collect2: ld returned 1 exit status

第29行:

quest.cpp:29: error: type 'List::node' is not derived from type 'List'

第32行:

quest.cpp: At global scope:
quest.cpp:32: error: 'int List::node::numNodes' is not a static member of 'struct List::node'

问题似乎是我不知道如何在静态变量被另一个结构中包含时访问它。我错过了一些明显的东西吗有一个更好的方法吗?我是否需要在头文件中声明变量? (我从Java来到C ++并且不习惯这些事情。)

这里是代码(剥离了不必要的混乱):

#include <cstdlib>

struct List {

    struct node {
//     static int numNodes;   //Didn't work
       node() {
            static int numNodes = 0;
            numNodes++;
       }
    };

    node* nodePtr;

    List() {
        nodePtr = NULL;
    }

    void addNode() {
       node* n = new node;
       nodePtr = n;
    }

    void deleteNode() {
        nodePtr->numNodes--;
        delete nodePtr;
    }

//   int node::numNodes = 0;    //Didn't work
};

//int List::node::numNodes = 0;     //Didn't work

int main() {
    List MyList;
    MyList.addNode();
    MyList.deleteNode();
}

1 个答案:

答案 0 :(得分:0)

以下是您需要更改的内容:

  1. 取消注释static int numNodes;顶部附近的行
  2. 删除static int numNodes = 0;在c&#39; tor。
  3. 取消注释您的底部尝试,int List :: node :: numNodes = 0;
  4. 确保初始化以cpp文件而不是标题结束。
  5. 然后它会正常工作。需要注意的是,除了调试助手之外,静态numNodes不会用于任何实际目的。如果静电是您设计的核心部分,那么您可能走错了路。