static Class在其他类之间不显示相同的值

时间:2012-04-17 18:39:42

标签: c++

我希望我提供足够的信息,并且我已经正确地命名了这个。

一般来说,我希望有一个在我的应用程序中存储数据的类,我需要其他几个类来访问相同的数据。基本上在多个类之间共享数据。

简短/简明代码如下:

example.cpp(主要应用程序)

// example.cpp : Defines the entry point for the console application.
//
#include "AnotherClass.h"
#include "ObjectClass.h"
#include "stdafx.h"
#include <iostream>  
#include <iomanip>

using namespace std;  
//Prototype
static void do_example ( );

int main()  

{  
    do_example ( );
}

static void do_example ( ) {


    MyObject.a = 5;
    cout <<"MyObject.a value set in main application is "<<MyObject.a<<"\n";

    AnotherClass    m_AnotherClass;

    m_AnotherClass.PrintValue();

}       

ObjectClass.h

class ObjectClass {
public:
    ObjectClass(); // Constructor
    int a; // Public variable
} static MyObject;

ObjecClass.cpp

#include "ObjectClass.h"

ObjectClass::ObjectClass() {

    a = 0;

}

AnotherClass.h

class AnotherClass {
public:
    AnotherClass(); // Constructor

    void PrintValue(); // Public function
    int value; // Public variable

};

AnotherClass.cpp

#include "AnotherClass.h"
#include "ObjectClass.h"
#include "stdafx.h"
#include <iostream>  
#include <iomanip>

using namespace std; 

AnotherClass::AnotherClass() {

    value = MyObject.a;

}

void AnotherClass::PrintValue() {

    cout <<"value in AnotherClass is "<<value<<"\n";
    cout <<"it should be the same."<<"\n";
}

但是该值是默认值0,就好像它是MyObject的新实例一样。但它应该从静态MyObject中拉出5的值。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

静态类实例本身就是一个静态变量。您期望发生的事情也是有道理的,但是,您的代码不会显示静态实例的处理方式。实际上,如果两个MyClassInstance都引用同一个对象,那么你甚至不需要静态声明。

此外,静态变量在cpp文件中定义。如果在头中定义它,则包含它的cpp文件(编译单元)将定义一个单独的静态变量。因此,在主cpp文件中定义静态对象,并在头文件中使用extern MyStaticClass。然后链接器将使用链接到同一个变量。