C ++ неразрешенные внешние факторы при вызове статической переменной - PullRequest
2 голосов
/ 18 марта 2012

Я пытаюсь изменить статическую переменную внутри DLL, поэтому, когда вызывается внешняя функция "ChangeVar", она меняет статическую переменную.Моя проблема в том, что я не могу ничего скомпилировать.Весь код ниже находится в одном C ++ проекте, скомпилированном в одну DLL.У меня нет проблем с вызовом функции, если я не пытаюсь изменить или получить статическую переменную.

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 Ответ

1 голос
/ 18 марта 2012

На это отвечает SO C ++ FAQ запись : вы объявили переменную, но не определили ее. Вы должны добавить

int API::iValue = 0;

Где-то в исходном файле, чтобы определить его.

Также ваш тест

if (API::iValue == 0)

всегда будет иметь значение true, поскольку вы устанавливаете его в 0 непосредственно перед проверкой, если оно равно 0, и функция всегда возвращает true.

...