C ++ dllimport:静态字段的未解析外部

时间:2015-09-26 22:48:20

标签: c++ visual-c++ dllimport dllexport

我有一个包含主程序和DLL模块的Visual Studio C ++项目。 DLL有一个具有以下定义的类:

// .h
#ifdef _USRDLL
    #define DLLAPI __declspec(dllexport)
#else
    #define DLLAPI __declspec(dllimport)
#endif

class DLLAPI EClass
{
public:
    static int value;

    static int get_value();
};

// .cpp
int EClass::value = 1;

int EClass::get_value()
{
    return value;
}

DLL项目编译成功,Dependency Walker可以观察到符号(值和get_value)。

在主程序中,我可以调用静态函数get_value

int v = EClass::get_value();  // Ok, v = 1

但是当我尝试直接访问字段value

int v = EClass::value;  // Error

我收到错误

LNK2001 unresolved external symbol "public: static int EClass::value" (?value@EClass@@2HA)

可以避免使用静态字段的访问器吗?

1 个答案:

答案 0 :(得分:0)

_USRDLL只应在DLL项目中定义。