我有一个带有一些静态成员函数的类。假设类B,该类有一个基类,该类来自第三方库,例如A。现在,类A已用dllimport声明,并用mingw可以毫无问题地构建sharedlibs或该类。该构建在显然不需要处理导入/导出内容的其他平台上运行良好。

// export and imports and properly defined.
#define IMPORT __declspec(dllimport)
#define EXPORT __declspec(dllexport)

Class IMPORT A {

public:


static staticOfA();

};

class EXPORT B : public A{

public:

...
static staticOfB()
};


现在,在链接dll时,这给了我未定义的参考。未定义的参考错误表示类B的静态和非静态方法。

谁能告诉我为什么?

如果以上信息不足,请询问,我可以提供。

最佳答案

好吧,那看起来并不好。您始终在.h文件中需要通心粉,因为在构建DLL时需要导出该类,但是在客户端代码中使用.h文件时需要将其导入。

标准模式是:

#ifdef BUILDING_FOO
#define EXPORTED __declspec(dllexport)
#else
#define EXPORTED __declspec(dllimport)
#endif

class EXPORTED A {
   // etc..
};


并且仅在构建DLL时定义BUILDING_FOO。

我真的不能说出您打算对类B做什么。如果确实应该将其导入,则它属于另一个DLL项目的另一个.h文件。

关于c++ - dllimport或dllexport用于使用基类dllimport进行类声明,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23854842/

10-12 07:09