从类型为"foo*"的右值初始化类型为"foo*&"的非常量引用无效?
invalid initialization of non-const reference of type ‘foo*&’ from an rvalue of type ‘foo*’?
想象一下这个简单的代码,为什么会出现编译错误?
#include <iostream>
using namespace std;
class foo{
public:
int *b;
foo(int a) {
b = NULL;
}
};
void bar(foo *&a) {
cout << "OK?" << endl;
}
int main() {
foo a(2);
bar(&a);
return 0;
}
我知道我可以使用bar(foo *a)
但是为什么使用&符号它不起作用,我怎样才能让它工作?
要使其正常工作,请将main
更改为:
foo *p = &a;
bar(p);
使用左值引用(foo* &
)意味着参数必须是左值。 p
是一个左值,因为它是变量的名称。 &a
是一个原则。
如果你想改变bar
但不想改变main
那么你可以使用foo *a
、foo * const &a
或foo * && a
中的任何一个,可以用右值初始化。
相关文章:
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 我想知道为什么"std::unique_ptr<int> foo(新 int)"是合法的,因为"std::<int>unique_ptr"要求输入参数类型应该是"int"?
- <<找不到运算符,尽管定义了 Foo 类型的右操作数,但该运算符仍采用类型为 Foo 的右侧操作数
- 汇总的“ Bignum Foo”类型不完整,无法定义
- 不了解C++类型不匹配:const Foo* to Foo* const&
- C++:成员'的错误请求;Foo'在'f',其是非类类型'Foo*'
- 从类型为"foo*"的右值初始化类型为"foo*&"的非常量引用无效?
- 为什么"Foo f(Bar());"可以是采用 Bar 类型并返回类型 Foo 的函数的声明?
- 为什么 'int x = + “foo”;' 是类型错误而不是语法错误
- 类型枚举_foo {a} foo的LZZ语法错误
- 命名空间中的'Foo' 'bar' 不命名头文件中对象成员的类型
- int* const* foo(int x);是一个有效的 C 函数原型。您如何"read"此返回类型?
- 为什么模板<类型名 T> 在 C++ 中计算为 Foo 而不是 Bar