2009-09-18 85 views
0

我剛開始練習C++,而且我被困在一個點上。 我有一個節點類和類有這樣一個構造函數:關於C++指針

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); 

我在做指針的問題,但我不知道我在想什麼。我得到一個編譯錯誤,說沒有匹配的函數調用。

在此先感謝

+1

你得到什麼確切的錯誤信息? – sth

回答

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)

+0

精心挑選,AraK。 – Andrew

+0

謝謝安德魯我忘了分號:) – AraK

+0

嗨, 是的我的構造函數是公開的。我更好地糾正這個錯誤... –

1

我認爲這是正常的空指針值指定0,而不是NULLNULL是一個用於C的宏,取決於如何定義宏,可能不適用於C++)。

另外,我不喜歡將std::string作爲參數類型。我寧願看到const char*const std::string&。因爲當你聲明一個非默認構造函數時,你隱藏了默認的構造函數(其中'默認構造函數'我的意思是沒有參數的構造函數)。如果你想支持new Node();,那麼你需要明確聲明默認構造函數(並且定義它是如何實現的)。

+0

'NULL'通常是'#defined'到C++中的普通'0'和C中的'((void *)0)'。 –

+0

是,並且如果它被定義爲「((void *)0)」,那就不適用於C++。 OP沒有說明它在代碼中的定義。 – ChrisW

+0

你不應該自己定義它。使用標準標題中提供的定義。 –

1

這對我在Mac OS X上的GCC-4上正常工作,在糾正錯誤並實現節點:: Node()構造函數。如果你編輯你的問題,將所有的代碼包含到你的測試程序中,以及你編譯時得到的實際錯誤信息,這可能會有幫助。

+0

嗨,抱歉,但編譯器給土耳其語的錯誤信息,這樣做對我沒有任何意義。有人將錯誤信息翻譯成土耳其語非常糟糕。 –

+0

好的,但你可以閱讀英文,對吧?只需安裝GCC的股票版本,並嘗試閱讀該錯誤消息。 –

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); 
}