亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 7588 | 回復: 19
打印 上一主題 下一主題

緊急求教:純虛函數已經實現(xiàn)了,為什么還提示抽象類不能初始化? [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-07-29 13:26 |只看該作者 |倒序瀏覽
本帖最后由 light511 于 2010-07-29 13:28 編輯

純虛函數已經實現(xiàn)了,為什么還提示抽象類不能初始化?
error C2259: 'myclass::NewClass' : cannot instantiate abstract class

代碼如下
myclass.h如下:

  1. namespace myclass
  2. {
  3.         class  MyClass
  4.         {
  5.         public:
  6.                 MyClass();
  7.                 static int myget();
  8.                 virtual int func1()=0;
  9.                 virtual int func2()=0;
  10.                 static void myset(char **);
  11.                 ~MyClass();
  12.         };

  13.         class NewClass: MyClass
  14.         {
  15.         public:
  16.                 NewClass();
  17.                 virtual int func1()=0;
  18.                 ~NewClass();
  19.         };
  20. }
復制代碼
myclass.cpp如下:

  1. #include<iostream>
  2. #include"myclass.h"
  3. int myclass::MyClass::myget()
  4. {
  5.         return 111;
  6. }
  7. void myclass::MyClass::myset(char ** p)
  8. {
  9.         * p=(char*)malloc(10);
  10.         char *t="good";
  11.         strcpy(*p,t);
  12.         return ;
  13. }
  14. int myclass::NewClass::func1()
  15. {
  16.         return 1;
  17. }

復制代碼
mytest.cpp如下:

  1. #include<iostream>
  2. #include"myclass.h"
  3. using namespace std;
  4. using namespace myclass;

  5. int main()
  6. {
  7.         int x = MyClass::myget();
  8.     cout<<"x="<<x<<endl;
  9.         char * p;
  10.         MyClass::myset(&p);
  11.         cout<<"p="<<p<<endl;
  12.         free(p);
  13.         NewClass oneclass=new NewClass();
  14.                 MyClass * twoclass=new NewClass();
  15.         return 0;
  16. }
復制代碼

論壇徽章:
0
2 [報告]
發(fā)表于 2010-07-29 13:29 |只看該作者
在newclass中的virtual int func1()=0;
把=0去掉。。

論壇徽章:
0
3 [報告]
發(fā)表于 2010-07-29 13:35 |只看該作者
回復 2# rain_fish


     error C2259: 'myclass::NewClass' : cannot instantiate abstract class
1>        due to following members:
1>        'int myclass::MyClass::func2(void)' : is abstract
去掉之后還報這個錯,但是func2,我的子類中并沒有這個函數阿,這是什么道理,難道要在子類中全部實現(xiàn)父類的純虛函數?

論壇徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52雙子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午馬
日期:2013-10-18 21:43:38
4 [報告]
發(fā)表于 2010-07-29 13:39 |只看該作者
回復  rain_fish


     error C2259: 'myclass::NewClass' : cannot instantiate abstract class
1>  ...
light511 發(fā)表于 2010-07-29 13:35



    不能還有純虛函數沒實現(xiàn)的

論壇徽章:
0
5 [報告]
發(fā)表于 2010-07-29 13:41 |只看該作者
回復 4# hellioncu


    謝謝,我把純虛函數都實現(xiàn)了,但還有個錯: error C2243: 'type cast' : conversion from 'myclass::NewClass *' to 'myclass::MyClass *' exists, but is inaccessible
好像是代碼中MyClass * twoclass=new NewClass();這句的錯,這樣不對嗎?

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數據庫技術版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
6 [報告]
發(fā)表于 2010-07-29 13:43 |只看該作者
即使給出純虛函數的定義, 依然是純虛, 依然是抽象類。
要獲得非抽象類, 要么改為非純虛; 要么繼承, 且去掉純虛。

論壇徽章:
0
7 [報告]
發(fā)表于 2010-07-29 13:47 |只看該作者
回復 6# OwnWaterloo


    我已經改了,但還報錯
1>e:\test\ctest\ctest\ctest\ctest.cpp(15) : error C2243: 'type cast' : conversion from 'myclass::NewClass *' to 'myclass::MyClass *' exists, but is inaccessible

  1. namespace myclass
  2. {
  3.         class  MyClass
  4.         {
  5.         public:
  6.                 MyClass();
  7.                 static int myget();
  8.                 virtual int func1()=0;
  9.                 virtual int func2()=0;
  10.                 static void myset(char **);
  11.                 ~MyClass();
  12.         };

  13.         class NewClass: MyClass
  14.         {
  15.         public:
  16.                 NewClass();
  17.                 virtual int func1();
  18.                 virtual int func2();
  19.                 ~NewClass();
  20.         };
  21. }
復制代碼

  1. #include<iostream>
  2. #include"myclass.h"
  3. int myclass::MyClass::myget()
  4. {
  5.         return 111;
  6. }
  7. void myclass::MyClass::myset(char ** p)
  8. {
  9.         * p=(char*)malloc(10);
  10.         char *t="good";
  11.         strcpy(*p,t);
  12.         return ;
  13. }
  14. int myclass::NewClass::func1()
  15. {
  16.         return 1;
  17. }
  18. int myclass::NewClass::func2()
  19. {
  20.         return 2;
  21. }

復制代碼

  1. #include<iostream>
  2. #include"myclass.h"
  3. using namespace std;
  4. using namespace myclass;

  5. int main()
  6. {
  7.         int x = MyClass::myget();
  8.     cout<<"x="<<x<<endl;
  9.         char * p;
  10.         MyClass::myset(&p);
  11.         cout<<"p="<<p<<endl;
  12.         free(p);
  13.         NewClass *oneclass=new NewClass();
  14.         MyClass * twoclass=new NewClass();

  15.         return 0;
  16. }
復制代碼

論壇徽章:
0
8 [報告]
發(fā)表于 2010-07-29 13:47 |只看該作者
好好看看c++編程 這個是最基本的

論壇徽章:
0
9 [報告]
發(fā)表于 2010-07-29 13:49 |只看該作者
回復 8# goubao198562


    這不正在學嗎,邊學邊實踐,到這,這個問題不太理解.請高手賜教.不勝感激.

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數據庫技術版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
10 [報告]
發(fā)表于 2010-07-29 13:51 |只看該作者
回復 7# light511

看看有沒有什么地方存在子類指針到父類指針的隱式轉換?
如果有, 且不是在子類、友元作用域中, 那子類必須是public派生。
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP