[英]Member of static member
如何访问其他类的静态成员的成员?
像这样:
code.hpp:
class A
{
public:
int* member;
A();
};
class B
{
public:
static A* StatOBJ;
};
code.cpp:
A* B::StatOBJ = new A();
int* B::StatOBJ->member = 42 //ERROR
我更愿意在main()之外(或其他任何函数-就像定义了静态变量一样)使用此函数,但我也在main()内进行了尝试。
A()为成员添加了一些值(并因此对其进行了初始化),我想对其进行更改。
当我尝试编译时,我得到:
错误:“->”标记之前的预期初始化程序
在//错误的行
A::member
未声明为static
,因此在分配其值时不要再次指定其数据类型:
B::StatObJ->member = ...;
另外, A::member
被声明为指针,因此必须先分配它,然后才能为其分配值:
B::StatObJ->member = new int;
*(B::StatObJ->member) = 42;
要么:
B::StatObJ->member = new int(42);
无论哪种方式,都可以通过给A
构造函数来处理该分配/分配来更好地满足这两种要求:
class A
{
public:
int* member;
A();
~A();
};
A::A()
: member(new int(42))
{
}
A::~A()
{
delete member;
}
A* B::StatObJ = new A();
或更好:
class A
{
public:
int* member;
A(int value);
~A();
};
A::A(int value)
: member(new int(value))
{
}
A::~A()
{
delete member;
}
A* B::StatObJ = new A(42);
对您的代码进行一些小的修改:
#include <iostream>
class A
{
public: //needs to be public
int* member;
};
class B
{
public: // needs to be public
static A* StatOBJ;
};
A* B::StatOBJ; //needs to be "defined" not just "declared"
int main(){
B::StatOBJ = new A(); // you dont want to allocate more memory so drop the type
B::StatOBJ->member = new int(42); // unless you change A::member to int instead of (*int) this must be done
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.