覆盖虚函数在DLL生成的项目中有所不同

时间:2013-07-04 07:01:34

标签: c++ visual-studio-2010 dll

我正在开发Visual Studio项目

header.h
class A
{
  virtual int __cdecl  funct1() = 0;
};

项目B(在编译时生成DLL)

 //projectBheader.h
#include<header.h>
#define projectBclass_DLL __declspec( dllexport )
class projectBclass_DLL projectBclass: public A
{
  virtual int __cdecl funct1();
}

//projectBheader.cpp

A::int __cdecl  projectBclass::funct1()
{
  //definition goes here
}

但是它给出了错误

error C2695: 'projectBclass::funct1': overriding virtual function differs 
from 'A::funct1' only by calling convention

提前致谢

1 个答案:

答案 0 :(得分:1)

简短版本:

也许您必须使用public访问修饰符。

长版:

只是一个疯狂的猜测,但也许你有一个可访问性问题,而不是调用约定问题。我很惊讶地看到一个人可以出口私人班级成员,但也许你毕竟不能? (如果我错了,请纠正我)

根据MSDN,“要导出类中所有公共数据成员和成员函数,关键字必须显示在类名称的左侧...”你做到了。 但是,默认范围是私有的。