繁体   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