c++ - 是否可以在不声明其方法的情况下保留裸类定义?

标签 c++ class methods linker-errors definition

在重构我之前的问题之前,我认为这个问题有点偏离......

标题几乎问了我的问题。

我怎样才能保留一个类定义而不给它方法并产生下面的错误?

这样做的原因是因为我想在一个单独的 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/

相关文章:

class - 如何制作一个Applet类是单例的Scala Applet?

java - 重用部分代码

c++ - i + 1 < vec.size() 和 i < vec.size() - 1 之间的区别

c++ - if语句中定义的局部变量的行为异常

c++ - 调试来自第三方库的 SIGPIPE 信号

java - 由java中的所有类扩展的默认类

c++ - 在 Ruby 中调用 C++ 共享库

css - 如何在使用 ">"定位类时添加悬停过渡

python - 我可以将一个函数和不同数量的参数传递给另一个函数吗?

java - 无法访问数组java中的对象