簡體   English   中英

返回NULL但得到錯誤C2440:'return':無法從'int'轉換為'const&'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM