Thu*_*uct 9 c++ static class object member
我正在尝试声明我在不同的类 B 中编写的类 A 的静态对象,如下所示:
class A // just an example
{
    int x;
public:
    A(){ x = 4; }
    int getX() { return x; }
};
class B
{
    static A obj1;  // <- Problem happens here
public:
    static void start();
};
int main()
{
    B::start();
}
void B::start()
{
    int x = obj1.getX();
}
我想要实现的是在(4)int x中B::start()达到相等。int xclass A
在过去的一个小时里,我尝试在谷歌上搜索所有这些,我所了解的只是 C++ 不允许静态对象的声明。那是对的吗?
如果是这样,这是我的问题。我怎样才能得到相同的结果?我有哪些可用的解决方法?请记住,我的其余代码依赖于类 B 中的函数是静态的。
错误
错误 LNK2001:无法解析的外部符号“私有:静态类 AB::obj1”
谢谢!
你应该初始化static var,代码:
class A // just an example
{
    int x;
public:
    A(){ x = 4; }
    int getX() { return x; }
};
class B
{
    static A obj1;  // <- Problem happens here
public:
    static void start();
};
A B::obj1; // init static var
int main()
{
    B::start();
}
void B::start()
{
    int x = obj1.getX();
}
小智 5
正如thinkerou所说,您需要包含变量的声明:
A B::obj1;
对于普通的非静态成员变量,您不需要这一步,因为这些变量是作为构造函数的一部分在幕后声明的。然后将这些变量绑定到您刚刚构造的类的实例。但是静态变量不绑定到类的任何实例;它们由一个类的所有实例共享。所以构造函数无法正确处理它们。
C++ 通过让您手动声明(并可选地初始化)任何静态成员变量来解决这个问题。根据它们的声明位置,它们通常在 main() 函数启动之前构造,因此它们可以立即使用。
| 归档时间: | 
 | 
| 查看次数: | 20229 次 | 
| 最近记录: |