“CException”: 不能实例化抽象类

uestc2006 2010-03-08 02:42:38
e:\vc\bitmap\bitmap\cdib.cpp(471) : error C2259: “CException”: 不能实例化抽象类
由于下列成员:
“CException::~CException(void)”: 是抽象的
c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(743) : 参见“CException::~CException”的声明

该要怎么改正啊?谢谢啦
...全文
1187 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
yewen37 2011-03-21
  • 打赏
  • 举报
回复
具体该怎么弄?我也遇到这种问题了
zgqiangha 2010-03-08
  • 打赏
  • 举报
回复
引用 13 楼 uestc2006 的回复:
引用 12 楼 cpp2017 的回复:throw new CException; ==> throw "错误!";  strPathname要用宽字节的。

宽字节?是什么意思?

我照网上的方法将strPathname    装换成==》  _T("strPathname"),没有再报错,不知道这样对不对啊?
万分感谢您指导我们这些菜鸟啊,谢谢!

这么做,你创建文件是不会成功的,CreatFile 的返回值应该是INVALID_HANDLE_VALUE
Eleven 2010-03-08
  • 打赏
  • 举报
回复
路过看看。。。。。。。。。
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 14 楼 cpp2017 的回复:
_T("strPathname"),没有再报错,不知道这样对不对啊?

==>
对的,因为你的项目使用的是unicode编码, _T() 会自动转换。


非常感谢您的指导
cpp2017 2010-03-08
  • 打赏
  • 举报
回复
_T("strPathname"),没有再报错,不知道这样对不对啊?

==>
对的,因为你的项目使用的是unicode编码, _T() 会自动转换。
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 12 楼 cpp2017 的回复:
throw new CException;

==>

throw "错误!"; 


strPathname要用宽字节的。


宽字节?是什么意思?

我照网上的方法将strPathname 装换成==》 _T("strPathname"),没有再报错,不知道这样对不对啊?
万分感谢您指导我们这些菜鸟啊,谢谢!
cpp2017 2010-03-08
  • 打赏
  • 举报
回复
throw new CException;

==>

throw "错误!";


strPathname要用宽字节的。

uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 9 楼 dianwang01 的回复:
3L说的很清楚了啊
你只需要从这个类派生一个类,然后把那些
virtual 函数类型 函数名(参数表)=0
的函数都实现,就是加上{}

然后你就可以用这个派生类了

建议你看本C++方面的书~~


谢谢你啊,呵呵。刚刚接触vc,点都不懂,谢谢你的建议。
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 8 楼 cpp2017 的回复:
如果你只想扔出个异常的话,可以

throw "错误!";



if(nCount != sizeof(BITMAPFILEHEADER))
{
throw new CException;
}
那请问下上面例句中

throw new CExeption

是什么意思?
汗,不懂……


还有
HANDLE hFile = ::CreateFile(strPathname, GENERIC_WRITE | GENERIC_READ,bShare ? FILE_SHARE_READ : 0,NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
报错是:
e:\vc\bitmap\bitmap\cdib.cpp(86) : error C2664: “CreateFileW”: 不能将参数 1 从“const char *”转换为“LPCWSTR”

请问下该怎么更改啊?
与指向的类型无关;转换要求 reinterpret_cast、C 样式转换或函数样式转换


dianwang01 2010-03-08
  • 打赏
  • 举报
回复
3L说的很清楚了啊
你只需要从这个类派生一个类,然后把那些
virtual 函数类型 函数名(参数表)=0
的函数都实现,就是加上{}

然后你就可以用这个派生类了

建议你看本C++方面的书~~
cpp2017 2010-03-08
  • 打赏
  • 举报
回复
如果你只想扔出个异常的话,可以

throw "错误!";
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 6 楼 dianwang01 的回复:
引用 5 楼 uestc2006 的回复:引用 3 楼 sigoyi 的回复:如果是抽象类的话,你编译器当然不会让你创建出CException的实例,或申请内存。这时你需要写一个类来继承CException,并实现CException中的纯虚方法,之后才可以创建出CException子类的对象。这个……太专业了……我才接触vc,都还不懂啊……
一句话,抽象类不能实例化

那么该怎么改正呢?谢谢啊
dianwang01 2010-03-08
  • 打赏
  • 举报
回复
引用 5 楼 uestc2006 的回复:
引用 3 楼 sigoyi 的回复:如果是抽象类的话,你编译器当然不会让你创建出CException的实例,或申请内存。这时你需要写一个类来继承CException,并实现CException中的纯虚方法,之后才可以创建出CException子类的对象。
这个……太专业了……我才接触vc,都还不懂啊……

一句话,抽象类不能实例化
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 3 楼 sigoyi 的回复:
如果是抽象类的话,你编译器当然不会让你创建出CException的实例,或申请内存。这时你需要写一个类来继承CException,并实现CException中的纯虚方法,之后才可以创建出CException子类的对象。

这个……太专业了……我才接触vc,都还不懂啊……
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
引用 2 楼 cpp2017 的回复:
你是不是new 了一个CException?
我是网上找到的cdib类编译的,

if(nCount != sizeof(BITMAPFILEHEADER))
{
throw new CException;
}


该怎么改正呢?谢谢啊
SiGoYi 2010-03-08
  • 打赏
  • 举报
回复
如果是抽象类的话,你编译器当然不会让你创建出CException的实例,或申请内存。这时你需要写一个类来继承CException,并实现CException中的纯虚方法,之后才可以创建出CException子类的对象。
cpp2017 2010-03-08
  • 打赏
  • 举报
回复
你是不是new 了一个CException?
uestc2006 2010-03-08
  • 打赏
  • 举报
回复
我用的是c2008,谢谢各位啦

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧