我刚刚开始练习c ++而且我一度陷入困境。 我有一个Node类,类有一个像这样的构造函数:
class Node
{
public:
Node(std::string,Node *,int,int,int,int);
private:
std::string state;
Node* parent_node;
int total_cost;
int path_cost;
int heuristic_cost;
int depth;
}
Node::Node(std::string state,Node *parent_node,int path_cost,int heuristic_cost,int total_cost,int depth)
{
this->state=state;
this->parent_node=parent_node;
this->path_cost=path_cost;
this->heuristic_cost=heuristic_cost;
this->total_cost=total_cost;
this->depth=depth;
}
到目前为止一切正常,但我无法使用NULL parent_node创建Node对象。 我试过这个:
Node *n = new Node("state name",NULL,0,15,20,1);
我也尝试过创建一个新对象并将其指定为parent_node,但也没有成功。
Node *temp = new Node();
Node *n = new Node("state name",temp,0,15,20,1);
我对指针做错了但我不知道我错过了什么。我收到一个编译错误,说没有匹配的函数调用。
提前致谢
答案 0 :(得分:6)
您的constructor public
?
class Node
{
public:
Node(std::string,Node *,int,int,int,int);
private:
std::string state;
Node* parent_node;
int total_cost;
int path_cost;
int heuristic_cost;
int depth;
};
另外,请不要忘记Node
声明后的分号,这不是Java;)
答案 1 :(得分:1)
我认为为空指针值指定0
是正常的,而不是NULL
(NULL
是用于C的宏,取决于宏的定义方式,可能与C ++不兼容)。
另外,我不希望将std::string
视为参数类型。我希望看到const char*
或const std::string&
。
同样Node* node = new Node();
会产生编译器错误,因为当你声明一个非默认构造函数时,你会隐藏默认构造函数(其中'默认构造函数'是指不带参数的构造函数)。如果你想支持new Node();
,那么你需要显式声明默认构造函数(并定义它的实现方式。)
答案 2 :(得分:1)
在纠正拼写错误并实现Node :: Node()构造函数之后,这对我在Mac OS X上的GCC-4上运行正常。如果您编辑了问题以包含测试程序的所有代码,以及编译时获得的实际错误消息,则可能会有所帮助。
答案 3 :(得分:0)
以下编辑对我来说很好:
// Added this.
#include <string>
class Node
{ public:
Node(std::string,Node *,int,int,int,int);
private:
std::string state;
Node* parent_node;
int total_cost;
int path_cost;
int heuristic_cost;
int depth;
}; // Added semicolon here
Node::Node(std::string state,Node *parent_node,
int path_cost,int heuristic_cost,int total_cost,int depth)
{
this->state=state;
this->parent_node=parent_node;
this->path_cost=path_cost;
this->heuristic_cost=heuristic_cost;
this->total_cost=total_cost;
this->depth=depth;
}
// Put code inside main.
int main()
{
Node *n = new Node("state name",NULL,0,15,20,1);
}