在重构我之前的问题之前,我认为这个问题有点偏离......
标题几乎问了我的问题。
我怎样才能保留一个类定义而不给它方法并产生下面的错误?
这样做的原因是因为我想在一个单独的 DLL(包含方法)中创建一个对象,但只返回一个指向我的主程序的引用指针。 顺便说一句,这是显式导出。
Error 1 error LNK2001: unresolved external symbol "public: int __thiscall ObjTest::getValue(void)" (?getValue@ObjTest@@QAEHXZ)
class ObjTest
{
private:
int x;
public:
int getValue();
};
最佳答案
由于您需要使用 LoadLibrary() 加载 .dll,您可以公开一个纯虚类,并让 .dll 返回它的子类:
将它们分成两个文件:
文件 ObjTest.h:
class ObjTest
{
public:
virtual int getValue() = 0;
};
ObjTest *CreateObjTest();
文件 ObjTest.cpp:
#include "ObjTest.h"
class ObjTestImpl : public ObjTest
{
int x;
public:
virtual int getValue();
};
int ObjTestImpl::getValue()
{
return x;
}
ObjTest *CreateObjTest()
{
return new ObjTestImpl();
}
您编译 ObjTest.cpp 并从中创建一个 .dll。您的主要可执行程序需要 LoadLibrary() 您的 .dll,使用 GetProcAddress()
将 CreateObjTest
提取为函数指针并调用它以返回一个新的 ObjTest。
(您可能还必须创建一个 DeleteObjTest()
函数 - 如果您的主要可执行文件和 .dll 以不同的 CRT 结束,它们将有不同的堆,因此您需要调用.dll 而不是仅仅执行 delete myObj
。)
另一种方法是将所有内容都包装在 C API 中,并通过 .dll 将不透明的句柄传递给 C 函数,而不是处理 C++ 对象。
关于c++ - 是否可以在不声明其方法的情况下保留裸类定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163465/