我在將程式從 C# 適應 C 時遇到了麻煩。給一個類分配空值是很常見的。但 C 不接受等價形式 'nullptr'
class Point{
public:
int x,y;
}
//...
Point p = nullptr;
有什么辦法解決嗎?
uj5u.com熱心網友回復:
問題是您的示例中的p非指標型別。這意味著它不能用nullptr. 的型別p是Point。
您可以創建p一個指向 a 的指標,Point以便您可以使用 a 對其進行初始化,nullptr如下所示:
Point *p = nullptr; //p is a pointer to non-const Point object
或者
如果要創建型別別的物件,Point那么一種方法如下:
Point p{1, 3};
我還建議您參考一本好的 C 書籍,以便更好地理解這個概念。
uj5u.com熱心網友回復:
您不能分配nullptr給類,因為類是型別而不是變數。您通過鍵入所做的Point p = nullptr;是要求編譯器找到一個Point接受 a的建構式nullptr。
您可以Point通過執行以下操作將 的物件創建為自動變數:
Point p = Point{1, 2}; // sets x = 2 and y = 3
或者就像這樣:
Point p;
但是,您需要定義一個初始化的建構式x,y因為您沒有為成員變數提供默認值。
根據該陳述句所在的背景關系,p將在堆上或堆疊上分配。如果您p在主函式中實體化,它將是后者。
您可以通過執行以下操作創建指向物件的指標Point:
Point* p = nullptr;
但是,您只會創建一個指標。您將需要進一步處理分配,您可以這樣做:
Point* p = new Point{1, 2};
在這種情況下,您還應該在程式結束之前釋放分配的記憶體,如下所示:
delete p;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/478788.html
