请大佬们指点下初学C加加的小菜鸟一枚,为什么程序编译不通过?
本帖最后由 小菜鸟一枚 于 2020-3-6 08:37 编辑#include <iostream>
using namespace std;
class AB
{
public:
int b;
AB(int b)
{
this->b = b;
cout << "构造函数AB()执行了" <<endl;
}
~AB()
{
cout << "析构函数~AB()执行了" <<endl;
}
};
class AC
{
public:
int c;
AC(int c)
{
this->c = c;
cout << "构造函数AC()执行了" <<endl;
}
~AC()
{
cout << "析构函数~AC()执行了" <<endl;
}
};
//多继承派生类
class ABC :public AB,public AC
{
public:
ABC():AB(3),AC(4)//初始化列表
{
cout << "构造函数ABC()执行了" <<endl;
}
~ABC()
{
cout << "析构函数~ABC()执行了" <<endl;
}
};
int main(int argc,char *argv[])
{
ABC *pABC = new ABC();
delete pABC;
system("pause");
return 0;
}
报错信息:
d:\users\lenovo\documents\visual studio 2010\projects\demo03\demo03\main.cpp(38): error C2371: “ABC”: 重定义;不同的基类型
1> c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wingdi.h(2828) : 参见“ABC”的声明
说明:今天学到多继承,然后自己这样定义了两个类,想复习一下对象初始化列表的使用,然后两个基类定义了有参的构造函数,派生类继承这两个类,AB和AC两个
类没有默认的构造函数,我想到了初始化列表,然后编译就不通过了,请大家帮忙看看,谢谢!{:1_893:} 换高一点版本的编译器 Visual Studio 2019可以正常編譯並執行
構造函數AB()執行了
構造函數AC()執行了
構造函數ABC()執行了
析構函數~ABC()執行了
析構函數~AC()執行了
析構函數~AB()執行了
請按任意鍵繼續 . . . 我这里最新版的G++没有错误..可能你自己环境的问题吧 原来是这样啊,可惜我这5年前的电脑带不动最新版的vs2019,感谢大家的热心回答!{:1_893:} 小菜鸟一枚 发表于 2020-3-6 08:40
原来是这样啊,可惜我这5年前的电脑带不动最新版的vs2019,感谢大家的热心回答!
剛剛又研究了一下,大概知道問題點了:
"wingdi.h"定義了一個叫ABC的struct,等於跟你的class ABC打架了
解決方法(擇一嘗試即可):
1.把class ABC改成其他名字, 避免跟ABC重覆即可
2.在include後面加入#pragma once,如下
#include <iostream>
#pragma once
希望有幫助到你
页:
[1]