我正在尝试更改DLL中的静态变量,因此当调用extern函数“ChangeVar”时,它将更改静态变量。我的问题是我无法编译任何东西。下面的所有代码都在一个编译成单个DLL的C ++项目中。调用函数我没有问题,只要我不尝试更改或获取静态变量。
class API
{
public:
static int iValue;
};
#include "Static.h"
extern "C"
{
__declspec(dllexport) bool ChangeVar()
{
API::iValue = 0;
if(API::iValue == 0)
{
return true;
}
else
{
return false;
}
}
}
当我这样做时,我只有两个错误:
Error 1 error LNK2001: unresolved external symbol "public: static int API::iValue" (?iValue@API@@2HA)
Error 2 error LNK1120: 1 unresolved externals
创建一个静态变量我需要做什么(显然我的方式不起作用),以及如何修改它以使其像静态一样工作,其值将在内存中更改?
答案 0 :(得分:1)
这由SO C++ FAQ entry回答:你已经声明了变量但没有定义它。你必须添加
int API::iValue = 0;
在源文件中的某个位置定义它。
另外,你的测试
if (API::iValue == 0)
将始终评估为true,因为如果它等于0,则在测试之前将其设置为0,并且该函数将始终返回true
。