调用静态变量时C ++未解析的外部

时间:2012-03-18 19:09:56

标签: c++ static scope extern

我正在尝试更改DLL中的静态变量,因此当调用extern函数“ChangeVar”时,它将更改静态变量。我的问题是我无法编译任何东西。下面的所有代码都在一个编译成单个DLL的C ++项目中。调用函数我没有问题,只要我不尝试更改或获取静态变量。

Static.h

class API
 {
   public:
     static int iValue;
 };

Functions.cpp

#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

创建一个静态变量我需要做什么(显然我的方式不起作用),以及如何修改它以使其像静态一样工作,其值将在内存中更改?

1 个答案:

答案 0 :(得分:1)

这由SO C++ FAQ entry回答:你已经声明了变量但没有定义它。你必须添加

int API::iValue = 0;

在源文件中的某个位置定义它。

另外,你的测试

if (API::iValue == 0)

将始终评估为true,因为如果它等于0,则在测试之前将其设置为0,并且该函数将始终返回true