在.dll文件
上//SWC.h
#ifndef _SWC_
# define _SWC_
# define SWC_CALL __declspec(dllexport)
#else
# define SWC_CALL __declspec(dllimport)
#endif
namespace SWC
{
struct SWC_CALL Mouse
{
//interface
};
class SWC_CALL SWC_Base : public someClass1, public someClass2
{
static Mouse mouse;
};
//other classes goes here...
}
//SWC_Base.cpp
namespace SWC
{
Mouse SWC_Base::mouse; //needed, to compile
//other SWC_Base function definition
}
开启.exe文件
我在static struct Mouse mouse
上定义SWC_Base
我收到链接错误
我通过在此文件上再次重新定义来解决我的问题
//main.cpp
#include "SWC.h"
#pragma comment (lib, "..\\SWC")
SWC::Mouse SWC::SWC_Base::mouse; //<- why do I need to redefine it again?
int main()
{
//...
return 0;
}
我已经在其.cpp文件中定义了SWC_Base :: mouse,为什么我需要在使用它的文件上再次重新定义它?我知道我的.dll项目会随着静态变量的增长而出现更多问题。
答案 0 :(得分:1)
如果您的主叫代码将使用__declspec (dllimport)
,则此问题将会消失:)
#ifdef EXPORTING_SWC
#define SWC_CALL __declspec(dllexport)
#else
#define SWC_CALL __declspec(dllimport)
#endif
答案 1 :(得分:0)
您在头文件中添加了一个任意namespace { }
的定义(如果您发布了实际代码)。每个匿名命名空间都将由编译器转换为特定于编译单元的命名空间。因此,您总是在新的命名空间中获得一个新类。
要解决问题,您可以