[英]Error C2440: 'return' : cannot convert from 'int [2]' to 'int (&&)[2]'
[英]returning NULL but getting error C2440: 'return' : cannot convert from 'int' to 'const &'
我有一個方法隨之而來
class BuildOrderStrategy
{
public:
virtual const Urgency& getUrgency() = 0;
...
}
哪個實現如下
const Urgency& RandomBuildOrderStrategy::getUrgency()
{
return NULL;
}
但是在編譯時我收到了這個錯誤
error C2440: 'return' : cannot convert from 'int' to 'const Urgency &'
在這個時候我真的想從getUrgency方法返回一個NULL值..所以..我的代碼有什么問題? 我該怎么解決? 我來自java世界,這是完全可能的..
緊急的代碼就是這個
class Urgency : public Investment
{
private:
public:
Urgency(BWAPI::UnitType type1, BWAPI::UpgradeType type2, BWAPI::TechType type3);
~Urgency(void);
};
你是令人困惑的引用和指針。 如果返回引用,則不能為NULL
,因為引用永遠不能。 如果要返回指針,則需要返回Urgency*
,而不是Urgency&
。
在C ++中,與Java等不同,您不能使用空引用。 空指針是的。 但是不存在空引用的概念。
請記住,NULL實際上只是0.現在停下來思考一下,將RandomBuildOrderStrategy
設置為0是否有意義?
您可以使用Pukku建議的指針。
從這種類型的函數返回NULL並沒有多大意義。 您可能希望指針不是引用。
NULL定義為0(或偶數(void *)0),因為0是一個整數,它是你在這個函數中返回的,它不能用於引用(必須引用一個實際的對象)
在這種情況下,在函數中返回指向Urgency對象的指針更有意義。 因此,嘗試將引用更改為指針。
const Urgency* RandomBuildOrderStrategy::getUrgency()
{
return NULL;
}
或者甚至嘗試返回一個以特殊方式初始化的Urgency類型,以便稍后檢查它是否為“空”。
如果函數返回指針,則返回NULL
將沒有問題。 當然,它沒有,所以它不好。
保證引用是指在行為良好的程序中有效的東西(即,沒有UB)。 即使存在從int
(0,NULL)到const Urgency&
轉換, NULL
也不會轉換為有效的引用。
您正在嘗試返回對C ++不允許的NULL引用
引用是一個名稱,它充當先前定義的變量的別名或替代名稱。
您可以更改getUrgency接口以返回指針。 由於您的緊急程度繼承自投資,您可以返回投資*指針
class BuildOrderStrategy
{
public:
virtual const Investment* getUrgency() = 0;
...
}
const Urgency* RandomBuildOrderStrategy::getUrgency()
{
return NULL;
}
返回引用可確保函數不返回NULL,但始終返回對對象的引用。 如果要檢查NULL,則應返回指針。 OTOH如果要返回引用,則返回空的Urgency對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.