没有匹配函数调用State :: State(State)

时间:2014-09-08 23:51:24

标签: c++

我不知道为什么在类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;
}

1 个答案:

答案 0 :(得分:1)

请注意,编译器必须在使用构造函数之前看到声明。但是,您在State课程后声明Node课程 。当编译器到达main()时,它已经看到了复制文件,因此它不会抱怨。

解决此问题的一种方法是在State声明之前移动Node声明。

更好的解决方法是将类声明移动到.h文件中,并将函数定义保存在.cpp文件中。只需#include .h文件顶部的.cpp文件,以便在.h文件中显示所有声明。

通常在大型项目中,您需要将代码组织到.h.cpp文件中,以便管理声明和定义以及它们之间的依赖关系。