C++ 重写虚拟函数在DLL生成的项目中有所不同

C++ 重写虚拟函数在DLL生成的项目中有所不同,c++,visual-studio-2010,dll,C++,Visual Studio 2010,Dll,我正在从事一个VisualStudio项目 header.h class A { virtual int __cdecl funct1() = 0; }; 项目B(编译时生成DLL) 提前感谢短版: 也许你必须使用public访问修饰符 长版本: 这只是一个粗略的猜测,但可能您遇到了可访问性问题,而不是呼叫约定问题。我很惊讶地看到一个人可以导出私有类成员,但也许你终究不能?(如果我错了,请纠正我) 根据“要导出类中的所有公共数据成员和成员函数,关键字必须出现在类名的左侧…”的说明,就像您

我正在从事一个VisualStudio项目

header.h
class A
{
  virtual int __cdecl  funct1() = 0;
};
项目B(编译时生成DLL)

提前感谢

短版: 也许你必须使用
public
访问修饰符

长版本: 这只是一个粗略的猜测,但可能您遇到了可访问性问题,而不是呼叫约定问题。我很惊讶地看到一个人可以导出私有类成员,但也许你终究不能?(如果我错了,请纠正我)

根据“要导出类中的所有公共数据成员和成员函数,关键字必须出现在类名的左侧…”的说明,就像您所做的那样。
不过,默认作用域是私有的。

“仅通过调用约定不同”表明u stdcall/u cdecl/etc说明符不匹配。如果这个空格真的在你的头中,那可能就是它,因为“int_ucdecl”会隐藏cdecl,编译器可能会抱怨缺少“u cdecl”。但是,如果不是这样,那么一定要加倍或三次检查_cdecl是否真的被理解为调用约定标记。也就是说,它可能被某些#define等替换为“”。@quetzalcatl这是一个键入错误,现已更正。可能它希望您也将类a标记为
\uu declspec(dllexport)
。a::int在那里做什么?类A不定义名为“int”的类型。
 //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