在另一个类中使用一个类的静态对象

Posted

技术标签:

【中文标题】在另一个类中使用一个类的静态对象【英文标题】:Use of static object of one class in the other 【发布时间】:2014-03-21 21:59:42 【问题描述】:

我正在尝试测试另一个类中对静态对象的调用。我到这里链接错误 LNK2001: unresolved external symbol "public: static class K G::ob1" 我不知道出了什么问题,在互联网上我找不到任何关于静态对象的信息,只有静态的所有其他配置。因此,我请求您的帮助。我是否需要为整个工作创建 K 的对象,还是我能够抽象得如此之多以至于我不创建任何对象?

#include <iostream>
using namespace std;

class K

    int a;
public:
    K(int x)  a = x; ;
    void print()   cout << " a is: " << a << endl; ;
;

class G

public:
    static K ob1;
    static void printG()
    
        ob1.print();
    ;
;

int main()

    K o1(10);
    G::printG();
    system("pause");

【问题讨论】:

【参考方案1】:

您必须定义静态变量。它类似于 C 中的全局变量。

K G::ob1;
int main() .... 

【讨论】:

它有效,谢谢(添加了默认构造函数一些值),但你能解释一下为什么会这样吗?据我了解,我声明了 G 类的成员变量(作为 K 类的对象)。因为它是静态的,所以我不需要 G 类的实例。为什么我不能在我尝试的 main() 中这样做? 类主体声明你的类变量,但不初始化它。 @beginh 还注意到你可以做K G::ob1(10); int main() @poljpocket 是的,我知道,但无法理解为什么类静态变量需要在全局范围内初始化(在 main 之前) IDK 究竟为什么,但标准确实声明“静态数据成员的定义应出现在包含成员类定义的命名空间范围内。”

以上是关于在另一个类中使用一个类的静态对象的主要内容,如果未能解决你的问题,请参考以下文章

java内部类的静态嵌套类

一个方法中的hashMap的值,怎么在另一个类中调用啊?

一个类中直接调用另一个类的静态方法吗

聚合关系C ++中另一个类中的一个类的静态对象

java非静态内部类中的属性this$0

PHP的静态及类中声明的常量