我不知道为什么在类Node中调用复制Constructer会给出这个错误,虽然类State复制构造函数在main中工作,看看。
注意:我的编译器是gcc版本4.8.2。
class Node
{
public:
Node(Node& rhs);
Node(State state);
private:
State mystate;
Node* next; // pointer to the next node
};
Node::Node(Node& rhs) : mystate(rhs.getState()), next(NULL)
{
// the error here how ever I could call
// State cpy constructer in main or other places !
}
Node:: Node(State state): mystate(state) , next(NULL)
{
//....
}
class State
{
public:
State(State& RHS);
void operator = (State& RHS);
private:
State* parent;
State::State(State& RHS) : parent(NUL)
{
.....
}
void State::operator = (State& RHS)
{
}
};
int main()
{
State x;
State m = x; // here State cpy constructer called successfuly
return 0;
}
答案 0 :(得分:1)
请注意,编译器必须在使用构造函数之前看到声明。但是,您在State
课程后声明Node
课程 。当编译器到达main()
时,它已经看到了复制文件,因此它不会抱怨。
解决此问题的一种方法是在State
声明之前移动Node
声明。
更好的解决方法是将类声明移动到.h
文件中,并将函数定义保存在.cpp
文件中。只需#include
.h
文件顶部的.cpp
文件,以便在.h
文件中显示所有声明。
通常在大型项目中,您需要将代码组织到.h
和.cpp
文件中,以便管理声明和定义以及它们之间的依赖关系。