[問題] 物件繼承之編譯不過

看板C_and_CPP作者 (小馬非馬)時間16年前 (2009/11/11 22:02), 編輯推噓2(2011)
留言13則, 5人參與, 最新討論串1/2 (看更多)
遇到問題:編譯不成功 我在練習繼承,單單作父類別沒問題,但是繼承好像有地方寫得怪怪的, 而我不懂以下這個意思> <" " error: base `car' with only non-default constructor in class without a constructor" 如果能解釋一下這句話,我會自己想辦法找出錯誤,但是現在就是不知道錯在哪 如果有大大願意直接幫忙挑錯那真是萬分感謝 簡易傷眼的程式碼如下: #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: 61.229.128.42

11/11 22:06, , 1F
你的benz bmw都沒有建構子嗎 XD
11/11 22:06, 1F

11/11 22:10, , 2F
可是沒有建構子不是也可以 0.0
11/11 22:10, 2F

11/11 22:11, , 3F
建構子是一個方便初值化的工具,所以應該可以沒有?@_@
11/11 22:11, 3F

11/11 22:12, , 4F
建構子當然可以沒有 不過不能不寫還想要用它囉
11/11 22:12, 4F

11/11 22:12, , 5F
benz mycar_1(1,"benz"); 這行就會用到建構子了
11/11 22:12, 5F

11/11 22:14, , 6F
那邊我原先是猜他找不到會去父類別找,所以不會囉?
11/11 22:14, 6F

11/11 22:16, , 7F
你要從子類別建構子中 丟給父類別建構子去處理
11/11 22:16, 7F

11/11 23:01, , 8F
我加了benz(int x, char *y):car(x,y){} 還是有問題耶
11/11 23:01, 8F

11/11 23:06, , 9F
這次是main裡面無法得知benz跟bmw的型態為何物
11/11 23:06, 9F

11/12 00:33, , 10F
錯誤訊息car::car()不存在,樓樓上新增後應該會沒問題..
11/12 00:33, 10F

11/12 00:36, , 11F
不是沒有建構也可DefaultCtor會偷加,若有做overload則否
11/12 00:36, 11F

11/12 12:23, , 12F
benz bmw 類別宣告結尾未加分號 ; ?
11/12 12:23, 12F

11/12 18:40, , 13F
樓上答對了,好厲害!!!謝謝各位幫忙
11/12 18:40, 13F
文章代碼(AID): #1A-iFVk0 (C_and_CPP)
文章代碼(AID): #1A-iFVk0 (C_and_CPP)