c++ - 嵌套类上的 __declspec(dllexport)
问题描述
代码:
#ifdef BUILD_DLL
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
class MY_API A
{
public:
void some_method();
class B
{
public:
void other_method();
};
};
我必须将我的宏 ( MY_API
) 添加到 B 类吗?
解决方案
我必须将我的宏 (MY_API) 添加到 B 类吗?
如果B
该类也被导出/导入(大概是这样),那么:是的,你这样做了。
试试下面的代码,我们在其中构建 DLL 并导出类:
#define BUILD_DLL
#ifdef BUILD_DLL
#define MY_API __declspec(dllexport)
#else
#define MY_API __declspec(dllimport)
#endif
class MY_API A {
public:
void some_method();
class B {
public:
void other_method();
};
};
// Dummy definitions of the exported member functions:
void MY_API A::some_method() {}
void MY_API A::B::other_method() {}
编译它会产生以下错误(MSVC,Visual Studio 2019):
错误 C2375:“A::B::other_method”:重新定义;不同的联动
MY_APP
如果我们简单地将属性添加到嵌套类中,消息就会消失,并且代码编译不会出现问题:
//...
class MY_API B { // Add attribute to nested class
//...
推荐阅读
- r - 获取行名到列名,并将数据从行到同名的列放在一起
- php - 如何通过 query() 获取 wordpress 帖子并以 json 格式输出?
- javascript - 如何使提及的成员可以成为默认作者(Discord.js)
- javascript - 如何使用 Bootstrap 使谷歌地图 iFrame 响应?
- javascript - 生成包含溢出内容的pdf
- reactjs - Next.js:在 getInitialProps() 中获取数据之前加载的页面
- android - admob 的测试广告给出错误代码 3
- node.js - bcrypt 的数据和盐参数
- c++ - 如何指定 begin() 和 end() 迭代器的范围以在向量向量中查找子向量的第一个值?
- kotlin - 与 kotlins 流异步发出流值