我的课程如下所示:
//.h file
class __declspec(dllimport) MyClass
{
public:
//stuff
private:
static int myInt;
};
// .cpp file
int MyClass::myInt = 0;
我收到以下编译错误:
error C2491: 'MyClass::myInt' : definition of dllimport static data member not allowed
我该怎么办?
答案 0 :(得分:29)
__declspec(dllimport)
表示当前代码使用实现您的类的DLL。因此,在DLL中定义了成员函数和静态数据成员,并在程序中再次定义它们是一个错误。
如果您正在尝试编写实现此类的DLL的代码(从而定义成员函数和静态数据成员),那么您需要标记类__declspec(dllexport)
。
通常使用宏来实现此目的。构建DLL时,您可以定义宏BUILDING_MYDLL
或类似的。在MyClass
的标题中,您有:
#ifdef _MSC_VER
# ifdef BUILDING_MYDLL
# define MYCLASS_DECLSPEC __declspec(dllexport)
# else
# define MYCLASS_DECLSPEC __declspec(dllimport)
# endif
#endif
class MYCLASS_DECLSPEC MyClass
{
...
};
这意味着您可以在DLL和使用DLL的应用程序之间共享标头。
答案 1 :(得分:4)
当你声明一个类dllimport时, 其所有成员函数和静态 数据成员已导入。不像 dllimport和dllexport的行为 非类型,静态数据成员 无法在中指定定义 一个dllimport的同一个程序 class已定义。
希望有所帮助......
答案 2 :(得分:0)
如果您要导入一个类,那么您要导入它的所有成员,因此无法在“客户端”定义任何类成员。应该代表实现dll使用dllexport关键字