标头和源文件之间的“类类型重新定义”错误

时间:2012-11-20 23:45:26

标签: c++ visual-studio-2010 visual-studio

所以我遇到了一个问题,我确信有一个非常明显的解决方案,但我似乎无法弄明白。基本上,当我尝试在我的标题中执行类定义和在我的源文件中实现时,我收到一个错误,说我正在重新定义我的类。使用Visual C ++ 2010 Express。

确切错误:“错误C2011:'节点':'类'类型重新定义”

以下示例代码:

Node.h:

#ifndef NODE_H
#define NODE_H
#include <string>

class Node{
public:
    Node();
    Node* getLC();
    Node* getRC();
private:
    Node* leftChild;
    Node* rightChild;
};

#endif

Node.cpp:

#include "Node.h"
#include <string>

using namespace std;


class Node{
    Node::Node(){
        leftChild = NULL;
        rightChild = NULL;
    }

    Node* Node::getLC(){
        return leftChild;
    }

    Node* Node::getRC(){
        return rightChild;
    }

}

2 个答案:

答案 0 :(得分:7)

class Node{
    Node::Node(){
        leftChild = NULL;
        rightChild = NULL;
    }

    Node* Node::getLC(){
        return leftChild;
    }

    Node* Node::getRC(){
        return rightChild;
    }

}

在代码中声明该类两次,第二次在.cpp文件中声明。要为您的课程编写函数,您可以执行以下操作

Node::Node()
{
    //...
}

void Node::FunctionName(Type Params)
{
    //...
}

不需要课程

答案 1 :(得分:2)

正如它所说,你正在重新定义Node类。 .cpp文件仅用于实现函数。

//node.cpp
#include <string>

using namespace std;

Node::Node() {
  //defined here
}

Node* Node::getLC() {
  //defined here
}

....