C++在类中声明一个静态对象
C++ declaring a static object in a class
我试图声明一个类a的静态对象,该对象是我在另一个类B中编写的,如下所示:
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();
}
我想要实现的是使CCD_ 2中的int x
等于CCD_ 4中的int x
(4)。
在过去的一个小时里,我试着在谷歌上搜索所有这些,我所理解的只是C++不允许静态对象的声明。这是正确的吗?
如果是的话,这是我的问题。我怎样才能得到同样的结果?我有哪些可用的解决方案?请记住,我的代码的其余部分取决于类B中的函数是否是静态的。
错误
错误LNK2001:未解析的外部符号"private:static class A B::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();
}
正如thinkerou所说,您需要包含变量的声明:
A B::obj1;
对于正常的非静态成员变量,您不需要此步骤,因为这些变量是作为构造函数的一部分在后台声明的。然后,这些变量被绑定到您刚刚构建的类的实例。但是静态变量并不绑定到类的任何实例;它们由类的所有实例共享。因此构造函数无法正确处理它们。
C++通过手动声明(并可选地初始化)任何静态成员变量来绕过这一点。根据它们的声明位置,它们通常在main()函数启动之前构造,因此可以立即使用。
相关文章:
- 分离一个静态常量 std::thread?
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- 我可以使用 constexpr 函数声明一个静态数组吗?
- 我正在尝试在我的类中创建一个静态成员,但编译器警告我它是未定义的
- 一个静态变量多副本
- 两个C++库如何共享一个静态缓冲区?
- 为什么静态指针返回函数中有一个"静态"键?
- C++ 给出编译器错误,将一个(静态)常量全局变量设置为另一个静态常量变量
- cmake-创建一个静态库
- 对另一个静态库中静态库方法的未定义引用
- 如何创建一个静态类来引用带有C++的字符串变量
- QMAKE:将静态库链接到另一个静态库
- 长镜头 -- 可能有一个静态类成员,该类成员具有访问非静态成员的 lambda
- 为 c++ 构建一个静态库,该库在内部依赖于第三方库
- 使用类模板参数推导来创建一个静态接口
- 具有两个动态维度和一个静态维度的多维数组
- 创建一个静态包含ffmpeg的共享库
- NetBeans创建一个静态库C
- 在抽象类中,可以使用抽象类A的类型创建一个静态字段