无法访问静态成员 - >未解决的外部符号i

时间:2014-06-08 08:23:27

标签: c++ static

class Test
{
private:
    static int i;
public: 
    static void foo()
    {
        i = 10;
    }
    static int geti(){ return i; }
};

int _tmain(int argc, _TCHAR* argv[])
{   
    Test::foo();
    std::cout << Test::geti();
    return 0;
}

这是一个简单的测试,我认为我的程序中的静态使用是错误的。因为我总是得到“未解决的外部符号i”。为什么是这样 ?

1 个答案:

答案 0 :(得分:0)

您必须在类定义之外定义 static成员变量:

int Test::i=10; //or any value or just the definition will do.

在课堂上你只是声明,而不是定义。没有定义,链接器将无法找到它并将显示未解析的外部符号

由于One Definition Rule和C ++的编译模型,类中的

static成员变量需要这种特殊处理。