c++成员函数访问私有静态变量
c++ member function access private static variable?
可能重复:
对静态成员有未定义的引用意味着什么?
我不知道如果我在类声明之外实现函数,为什么会出现错误"对‘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;
}
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量