需要帮助以了解错误消息
Need help to understand the error message
编译代码我得到以下错误
代码:
#include <iostream>
using namespace std;
class a {
protected: int a=5;
public:
a(){cout<<"a c"<<endl;}
};
class b {
protected: int b=6;
public:
b(){cout<<"b c"<<endl;}
};
class d :protected a,protected b
{
public:
void display()
{cout<<a<<b<<endl;}
d(){cout<<"d c"<<endl;}
};
int main()
{d m;
m.display();return 0;}
错误:
/root/newtest/main.cpp|4|error: field ‘int a::a’ with same name as class [-fpermissive]|
/root/newtest/main.cpp|9|error: field ‘int b::b’ with same name as class [-fpermissive]|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
为什么我会遇到这些错误?
我刚刚在class a
和class b
中定义了构造函数。
您的成员变量和您的构造函数冲突。C 标准不允许它:
[class.mem]/19
此外,如果T类具有用户指定的构造函数,则每个 T类的非静态数据成员应具有不同的名称
删除构造函数或重命名变量将使其构建良好。允许class a
的成员命名为a
,它将隐藏注入的类名称。但是,我希望您看到一旦需要开始添加构造函数的问题,因为在班级定义中,a::a
指的是什么?完全无法解析。
成员变量的名称int a
与注入class-name 的冲突,也是 a
。
12类[类]
插入一个类名称的范围,在该范围中,在看到类名称之后立即声明其范围。班级名称也插入了班级本身的范围。这被称为注入式名称。为了进行访问检查,注射级名称被视为是公共成员名称。
6.4名称查找[basic.lookup]
class 的注射类名称(第12条(也被认为是该类的成员,出于名称隐藏和查找的目的。。/p>
作为一个选项,您可以为成员变量使用不同的名称a
和b
。
相关文章:
- C++错误消息*成员参考.**初学者*
- 如何通过参数抛出错误消息
- glad 导致 glfwSwapBuffers 返回错误消息
- FindPackageHandleStandardArgs.cmake:137 的 CMake 错误(消息):找不到 Boost (缺少:正则表达式)(找到合适的版本"1.72.0",
- 如何接受 [ENTER] 键作为无效输入并发送错误消息
- 重新定义预定义的 errno 错误消息 (E2BIG)
- SDL 映像:无法打开映像,仅显示错误消息
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 错误消息"expected expression"....有人知道它为什么这么说吗?
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- GCC 警告和 gcc 错误消息之间的区别
- 为 c++ cin 上的输入数无效生成错误消息
- 来自带有mbedtls TLS的Mongoose Web服务器的错误消息
- 如何使用realsense摄像头调试ROS错误消息
- C++ 概念 - 需要括号中的概念会导致 2 条冲突的错误消息
- 编译器收到错误消息(textc.exe已停止)
- 结构数组的构造函数错误,错误消息:没有构造函数实例与参数列表匹配
- 使用 c++/WinRT Direct3D UWP Game DR 模板 Direct X11 的错误消息
- max_element() 给出非常奇怪的错误消息
- 不断收到错误消息,并非所有控制路径都返回值