gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:59:36 24 4
gpt4 key购买 nike

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

标题几乎问了我的问题。

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com