C++ c++;成员函数访问私有静态变量?

C++ c++;成员函数访问私有静态变量?,c++,static-members,C++,Static Members,可能重复: 我不知道如果我在类声明之外实现函数,为什么会出现错误“未定义对`TT::I'的引用”? 这是密码 class TT{ private: static int i; public: void t(); }; void TT::t(){ i=0; } 这与定义函数的位置无关,只是没有定义静态成员变量,只是声明了它。你需要把它的定义放在类之外,例如 int TT::i; 静态变量保存在与类的任何实例不同的内存部分。这是因为它们不是任何类实例的一部分 下面的代

可能重复:

我不知道如果我在类声明之外实现函数,为什么会出现错误“未定义对`TT::I'的引用”? 这是密码

class TT{
private:
    static int i;
public:
    void t();
};

void TT::t(){
    i=0;
}

这与定义函数的位置无关,只是没有定义静态成员变量,只是声明了它。你需要把它的定义放在类之外,例如

int TT::i;

静态变量保存在与类的任何实例不同的内存部分。这是因为它们不是任何类实例的一部分

下面的代码是编译的,因为从未调用函数t

class TT
{
private:
    static int i;
public:
    void t()
    {
        i=0;


    }
};

int main(int argc, char *argv[])
{
    qWarning() << "hi";
    TT * t = new TT();
    //t->t();
    return 0;
}
功能示例,定义了静态:

class TT
{
private:
    static int i;
public:
    void t();
};

int TT::i = 0;

void TT::t(){
    i=0;
}
对'TT::i'的未定义引用

是因为您尚未在类外定义静态数据成员。在使用静态数据成员之前,必须在类外定义它们

class TT
{
private:
    static int i;
public:
    void t();
};

void TT::t()
{
    i=0;
}
int TT::i=0; // define it outside the class. and if possible initialize 

+我删除了我的回复,因为我意识到你搞定了。他得到的“未定义引用”错误是链接器错误,而不是编译器错误。绝对正确。我有一个坏习惯,就是把“编译输出”控制台中出现的任何东西都称为编译器错误。这是一个更完整的答案!:D
class TT
{
private:
    static int i;
public:
    void t();
};

int TT::i = 0;

void TT::t(){
    i=0;
}
class TT
{
private:
    static int i;
public:
    void t();
};

void TT::t()
{
    i=0;
}
int TT::i=0; // define it outside the class. and if possible initialize