繁体   English   中英

静态成员

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM