在C ++中访问程序外的变量

时间:2011-04-25 06:17:50

标签: c++

id.cpp

#include "stdafx.h"
#include <iostream>
using namespace std;

class A
{
public:
    static int a;
};
int A::a=20;

class b
{
public:
    b()
    {
     cout<<A::a<<endl;
    }
};

int main()
{
    b *b1 = new b();
    return 0;
}

id1.cpp

#include "stdafx.h"
#include <iostream>
using namespace std;

class c
{
public:
    int get()
    {
        cout<<A::a<<endl;
    }
};
int main()
{
    c c1;
    c1.get();
    return 0;
}

这是他们声明并在一个程序中获得输出的方式,但是当我尝试它时,由于类不是命名空间或者id1文件中没有包含程序ID,我会收到错误...如何在不使用命名空间的情况下将存储在一个文件中的变量放到另一个文件中并包含头文件是否有任何选项?

1 个答案:

答案 0 :(得分:3)

如图所示的两个单独的程序(它们是分开的,因为它们都定义main())不能以任何简单的方式共享变量。

如果将两个单独的文件集成到一个程序中,那么main()程序中的一个被替换,那么您将回到标准变量A::a的标准技术中标头并在两个模块中使用该标头。标题还将定义类A。这是唯一理智的方式。

您可以在每个文件中编写两次类的定义,一次在每个文件中,并在一个文件中将变量声明为extern并在另一个文件中定义,但即使在这个简单的情况下也不是特别明智如果代码变得更复杂并且存在更多共享变量,则会迅速退化为无法维护的灾难。

当然,你可能想要考虑根本不使用全局变量,而是提供一个访问器函数。但是,您最终会得到一个标头,声明类A提供的服务以及实现这些服务的代码,以及使用这些服务的代码。