小菜鸟一枚 发表于 2020-3-5 16:55

请大佬们指点下初学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:}

古月不傲 发表于 2020-3-5 17:17

换高一点版本的编译器

absman1972 发表于 2020-3-5 18:08

Visual Studio 2019可以正常編譯並執行

構造函數AB()執行了
構造函數AC()執行了
構造函數ABC()執行了
析構函數~ABC()執行了
析構函數~AC()執行了
析構函數~AB()執行了
請按任意鍵繼續 . . .

totoroyyw 发表于 2020-3-5 18:39

我这里最新版的G++没有错误..可能你自己环境的问题吧

小菜鸟一枚 发表于 2020-3-6 08:40

原来是这样啊,可惜我这5年前的电脑带不动最新版的vs2019,感谢大家的热心回答!{:1_893:}

absman1972 发表于 2020-3-6 10:07

小菜鸟一枚 发表于 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]
查看完整版本: 请大佬们指点下初学C加加的小菜鸟一枚,为什么程序编译不通过?