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

c++ member function access private static variable?

本文关键字:静态 变量 访问 成员 函数 c++      更新时间:2023-10-16

可能重复:
对静态成员有未定义的引用意味着什么?

我不知道如果我在类声明之外实现函数,为什么会出现错误"对‘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=0; // define it outside the class. and if possible initialize 

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

下面的代码之所以编译,是因为从未调用过函数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()
    {
        i=0;
    }
};
int main(int argc, char *argv[])
{
    qWarning() << "hi";
    TT * t = new TT();
    t->t();
    return 0;
}

您可以使用C++中没有使用的未定义引用(以及C)。出于某种原因,我不确定,编译器似乎认为这段代码是在引用I,而上面符合要求的东西直到被调用才引用它(有什么想法吗)?

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();
};
int TT::i = 0;
void TT::t(){
    i=0;
}