紧急求教:纯虚函数已经实现了,为什么还提示抽象类不能初始化?
时间:2010-07-29
来源:互联网
纯虚函数已经实现了,为什么还提示抽象类不能初始化?
error C2259: 'myclass::NewClass' : cannot instantiate abstract class
代码如下
myclass.h如下:
- namespace myclass
- {
- class MyClass
- {
- public:
- MyClass();
- static int myget();
- virtual int func1()=0;
- virtual int func2()=0;
- static void myset(char **);
- ~MyClass();
- };
-
- class NewClass: MyClass
- {
- public:
- NewClass();
- virtual int func1()=0;
- ~NewClass();
- };
- }
- #include<iostream>
- #include"myclass.h"
- int myclass::MyClass::myget()
- {
- return 111;
- }
- void myclass::MyClass::myset(char ** p)
- {
- * p=(char*)malloc(10);
- char *t="good";
- strcpy(*p,t);
- return ;
- }
- int myclass::NewClass::func1()
- {
- return 1;
- }
- #include<iostream>
- #include"myclass.h"
- using namespace std;
- using namespace myclass;
-
- int main()
- {
- int x = MyClass::myget();
- cout<<"x="<<x<<endl;
- char * p;
- MyClass::myset(&p);
- cout<<"p="<<p<<endl;
- free(p);
- NewClass oneclass=new NewClass();
- MyClass * twoclass=new NewClass();
- return 0;
- }
作者: light511 发布时间: 2010-07-29
把=0去掉。。
作者: rain_fish 发布时间: 2010-07-29
error C2259: 'myclass::NewClass' : cannot instantiate abstract class
1> due to following members:
1> 'int myclass::MyClass::func2(void)' : is abstract
去掉之后还报这个错,但是func2,我的子类中并没有这个函数阿,这是什么道理,难道要在子类中全部实现父类的纯虚函数?
作者: light511 发布时间: 2010-07-29
error C2259: 'myclass::NewClass' : cannot instantiate abstract class
1> ...
light511 发表于 2010-07-29 13:35
不能还有纯虚函数没实现的
作者: hellioncu 发布时间: 2010-07-29
谢谢,我把纯虚函数都实现了,但还有个错: error C2243: 'type cast' : conversion from 'myclass::NewClass *' to 'myclass::MyClass *' exists, but is inaccessible
好像是代码中MyClass * twoclass=new NewClass();这句的错,这样不对吗?
作者: light511 发布时间: 2010-07-29
要获得非抽象类, 要么改为非纯虚; 要么继承, 且去掉纯虚。
作者: OwnWaterloo 发布时间: 2010-07-29
我已经改了,但还报错
1>e:\test\ctest\ctest\ctest\ctest.cpp(15) : error C2243: 'type cast' : conversion from 'myclass::NewClass *' to 'myclass::MyClass *' exists, but is inaccessible
- namespace myclass
- {
- class MyClass
- {
- public:
- MyClass();
- static int myget();
- virtual int func1()=0;
- virtual int func2()=0;
- static void myset(char **);
- ~MyClass();
- };
-
- class NewClass: MyClass
- {
- public:
- NewClass();
- virtual int func1();
- virtual int func2();
- ~NewClass();
- };
- }
- #include<iostream>
- #include"myclass.h"
- int myclass::MyClass::myget()
- {
- return 111;
- }
- void myclass::MyClass::myset(char ** p)
- {
- * p=(char*)malloc(10);
- char *t="good";
- strcpy(*p,t);
- return ;
- }
- int myclass::NewClass::func1()
- {
- return 1;
- }
- int myclass::NewClass::func2()
- {
- return 2;
- }
- #include<iostream>
- #include"myclass.h"
- using namespace std;
- using namespace myclass;
-
- int main()
- {
- int x = MyClass::myget();
- cout<<"x="<<x<<endl;
- char * p;
- MyClass::myset(&p);
- cout<<"p="<<p<<endl;
- free(p);
- NewClass *oneclass=new NewClass();
- MyClass * twoclass=new NewClass();
-
- return 0;
- }
作者: light511 发布时间: 2010-07-29
作者: goubao198562 发布时间: 2010-07-29
这不正在学吗,边学边实践,到这,这个问题不太理解.请高手赐教.不胜感激.
作者: light511 发布时间: 2010-07-29
看看有没有什么地方存在子类指针到父类指针的隐式转换?
如果有, 且不是在子类、友元作用域中, 那子类必须是public派生。
作者: OwnWaterloo 发布时间: 2010-07-29
class NewClass: public MyClass
我把继承加上public,编译没错,但是链接的时候报错:1>ctest.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall myclass::NewClass::NewClass(void)" (??0NewClass@myclass@@QAE@XZ),该符号在函数 _main 中被引用
作者: light511 发布时间: 2010-07-29
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28