请求成员函数时出现c++错误
c++ error when requesting member function
我有一个这样的类
class action {
int val;
// some other members
public:
action() : val(0) { } // default constructor initializes action type to 0
action(int val) : val(val) { }
// some other member functions
int getVal() { return val; }
};
和在简单场景中使用
时action obj1(), obj2(2);
cout << "Initial state : { " << obj1.getVal() << ", " << obj2.getVal() << " }n";
得到一个编译错误
error: request for member ‘getVal’ in ‘obj1’
这是怎么回事?
这是因为不是声明action
类型的obj1
action obj1()
声明了一个函数obj1,它不接受任何参数,并返回一个动作对象。首选c++11大括号初始化来调用默认构造函数
action obj1{}
或者不要使用那些额外的括号
你可以谷歌这个问题,作为c++最令人烦恼的解析
这是因为
action obj1();
实际上声明obj1
是一个返回action
对象的函数。除非需要向构造函数传递参数,否则请去掉括号:
action obj1;
用obj1
代替obj1()
。
要修复上述错误,在声明时删除obj1中的()。
在此语句中
action obj1(), obj2(2);
你声明的函数
action obj1()
返回类型为action,没有参数,并且有一个action类型的对象
action obj2(2);
将语句改为
action obj1, obj2(2);
另一种避免这种错误的方法是写
action obj1 {}, obj2(2);
如果你的编译器支持列表初始化。
问题在于函数声明和带有空参数列表的对象定义之间存在歧义。c++为函数声明的利益解决了冲突。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 错误:未在此范围内声明'reverse'