有沒有辦法做我想做的事情,而不使用指針或引用?有沒有辦法返回null而不是自定義對象(不是指針)?
下面的代碼:
Node getSmallest() {
if (openList.empty())
return 0; // syntax error
// some other code
}
有沒有辦法做我想做的事情,而不使用指針或引用?有沒有辦法返回null而不是自定義對象(不是指針)?
下面的代碼:
Node getSmallest() {
if (openList.empty())
return 0; // syntax error
// some other code
}
看起來您想要在代碼成功時返回Node
對象的副本。
struct Node{
int a;
bool isEmpty_;
Node(bool isEmpty):isEmpty_(isEmpty)
};
Node getSmallest() {
if (openList.empty())
return Node(false);
// some other code
}
沒有別的辦法,你必須返回一個對象,其內部可以有一個isEmpty
標誌設置,以表示該錯誤。
我建議避免使用'isEmpty_'成員,並使用'boost :: optional
getSmallest()函數的返回類型被定義爲一個Node對象,它在C++中意味着 返回的表達式必須是Node類型,並且在運行時返回的對象的內存將被複制回調用方。
因爲,你不能返回整數0
你能做什麼,而是被定義節點特定實例對象,它表示一個空節點。這主要取決於節點的定義,假設如下:
class Node {
// Some representative field
int a;
// Some basic constructor
Node(int a){
this->a = a;
}
}
可以在類似的方式定義一個空節點:
class Node {
// Some representative field
int a;
// Some basic constructor
Node(int a){
this->a = a;
}
static Node NULL_NODE(-1);
}
上面的例子假設你實際上從未指派字段a
其他節點對象中的值爲-1。如果-1不符合你的目的,你可以選擇一個你認爲永不使用的值。 如果節點中有多個字段,則可以用值的組合來表示NULL_NODE。
編輯:正如innosam指出的,你也可以(也可能更好)添加一個布爾字段到節點類來表示節點是否爲NULL或任一。
通過上面說的,你現在就可以實現你的功能是這樣的:
Node getSmallest() {
if (openList.empty())
return Node.NULL_NODE; // syntax error
// some other code
}
否則,您可以使用第三方工具,可以讓你做同樣的事情。 請參閱其他人對此案例的回答。
節點是類還是typedef?讓你的問題更加清楚,好吧,0不是節點,所以報錯 –
節點是一個類 – Oleksiy
除非有一個值'節點'可以把它代表null。您可以返回一個可選對象(例如'boost :: optional') –
juanchopanza