返回 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 没有多大意义。您可能想要指针而不是引用。
NULL 定义为 0(甚至 (void*)0),并且由于 0 是一个整数,因此您在此函数中返回的内容不适用于引用(必须引用实际对象)
在这种情况下,在函数中返回指向 Urgency 对象的指针更有意义。因此,请尝试将引用更改为指针。
const Urgency* RandomBuildOrderStrategy::getUrgency()
{
return NULL;
}
或者甚至尝试返回已以特殊方式初始化的 Urgency 类型,以便稍后检查它是否为"空"。
你混淆了引用和指针。如果返回引用,则不能NULL
,因为引用永远不能。如果要返回指针,则需要返回Urgency*
,而不是Urgency&
。
与Java和其他C++不同,你不能有一个空引用。空指针是的。但是空引用的概念并不存在。
请记住,NULL 实际上只是 0。现在停下来想一想,将RandomBuildOrderStrategy
设置为 0 有意义吗?
您可以按照 Pukku 的建议使用指针。
如果您的函数返回指针,则返回NULL
就可以了。 当然,它没有,所以它不行。
引用保证引用在行为良好的程序中有效(即没有 UB)。 即使存在从int
(0,NULL)到const Urgency&
的转换,NULL
也不会转换为有效的引用。
引用的返回可确保函数不返回 NULL,但始终返回对对象的引用。如果要检查 NULL,则应返回一个指针。OTOH 如果要返回引用,请返回一个空的紧急对象。
您正在尝试返回对 NULL 的引用
,这在C++中是不允许的引用是 充当先前定义的变量的别名或备用名称的名称。
您可以将 getUrgency 接口更改为返回指针。由于您的紧迫性继承自投资,您可以返回投资*指针
class BuildOrderStrategy
{
public:
virtual const Investment* getUrgency() = 0;
...
}
const Urgency* RandomBuildOrderStrategy::getUrgency()
{
return NULL;
}
- 'max'匹配'std::function<const int &(const int &, const int &)>'无过载
- 在C++中,如果"int a = 3; int* p = &a;",那么为什么不允许"const int* &pp = p",但允许"const int* const &pp = p"?
- 调用'myStud::myStud(int, const char [5], int, int, int)'没有匹配函数
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- int(int)& 或 int(int) const &是什么类型?
- 传递 const int* 和 int* 时调用重载函数的不同版本(const int* const&/&&)
- 如何在构造函数中初始化int const * const
- 对"displayForStudent(int, int const*, double const*, int)"的未定义引用 collect2.exe:错误:ld 返回 1 个退出状态
- 如何在 C++ 中解释"const int *const & variable"
- 为什么"int & const" MSVC 编译得很好?
- const int const&和const int&in C++有什么区别?
- std::set<int * const> 不会编译
- " invalid operands of types 'int' and 'int* const'" 来自功能的错误,来自书
- std::initializer_list<int const> 不能从 std::initializer_list <int>构造
- 对'std::string Helper::ToString<int>(int const&)'的未定义引用
- 无法弄清楚 int[3][3] 和 int(* const)[3] 之间的区别
- const int* const fun(const int* const& p) const的含义;
- 为什么vector<int * const>是非法/不合逻辑的?
- 对 Stack<int>::p ush(int const&) 的未定义引用
- JsonCpp:未定义的对"Json::Value::operator[](int) const"的引用