Re: [問題] 物件繼承之編譯不過
※ 引述《conan77420 (小馬非馬)》之銘言:
: 遇到問題:編譯不成功
: 我在練習繼承,單單作父類別沒問題,但是繼承好像有地方寫得怪怪的,
: 而我不懂以下這個意思> <"
: " error: base `car' with only non-default constructor in class without a
: constructor"
class car 有下列建構子
car(int ,char*)
故 compiler 不會主動再加預設建構子
car()
而 benz 繼承了 car 且無任何建構子
compiler 主動增加預設建構子
benz() : car() {} // 此行會呼叫父類別之 car(),
// 但你並未有 car() 這個建構子,
// 所以將產生錯誤
因此解法目前個人想到有兩種以上,
最簡單的是手動增加 car(),
這樣其他繼承car 的子類別不會有相同的問題,
但這未必是你所需要的。
: 如果能解釋一下這句話,我會自己想辦法找出錯誤,但是現在就是不知道錯在哪
: 如果有大大願意直接幫忙挑錯那真是萬分感謝
: 簡易傷眼的程式碼如下:
: #include<iostream.h>
: #include <stdlib.h>
: #include<string.h>
: //============父類別部分==========
: class car
: {
: public:
: car(int,char*); //放入(color的編號,車子名稱)
: ~car();
: int move(int);
: void detail();
: private:
: int color;
: char name[11];
: int distance;
: };
: car::car(int x, char *y)
: {
: color=x;
: strcpy(name,y);
: }
: car::~car()
: {
: delete [] name;
: }
: //==================================
: //============子類別================
: class benz:car
: {
: public:
: void fire(int x);
: private:
: int attack;
: }
: class bmw:car
: {
: public:
: void fire(int y);
: void defence();
: private:
: }
: int main()
: {
: benz mycar_1(1,"benz"); //其實這邊我不確定這樣寫可不可以
: bmw mycar_2(2,"bmw");
: ========================================
: 想法:我猜錯誤好像是在繼承的地方,以至於編譯其他地方也有問題
: system("pause");
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.9.2
討論串 (同標題文章)