关于C ++指针

时间:2009-09-18 00:19:17

标签: c++ pointers

我刚刚开始练习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);

我对指针做错了但我不知道我错过了什么。我收到一个编译错误,说没有匹配的函数调用。

提前致谢

4 个答案:

答案 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是正常的,而不是NULLNULL是用于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);
}