2013-07-28 107 views
3

我想知道子类是否可以访问main.cpp文件中的变量。例如:访问主类变量的C++子类

Main.ccp

int x = 10; 

int main() 
{ 
    return 0; 
} 

示例类的CPP

Subclass::Subclass() 
{ 
    x = 5; 
} 

错误:

error: 'x' was not declared in this scope 

我是新来的编码,我想知道这是否在某种程度上可能如果不是,我该怎么做这样的事情?

+0

全局变量是你应该很少使用的东西,如果有的话。 – Borgleader

+0

这是做什么的原因? – soon

+0

我正在使用SDL,并在主内部创建了SDL_Surface变量,并尝试从另一个类访问它们,但我不知道如何。我需要能够从两个类访问它 – Rapture686

回答

5

这是可能的,但通常不是一个好主意:

Main.ccp

int x = 10; 

int main() 
{ 
    return 0; 
} 

示例类的CPP

extern int x; 

Subclass::Subclass() 
{ 
    x = 5; 
} 

也许你想要做的,而不是什么是传递一个参考x去相关的类或函数。

最起码,这将是一个好主意,不同的结构是:

x.hpp:

extern int x; 

x.cpp

#include "x.hpp" 

int x = 10; 

class.cpp:

#include "x.hpp" 

Subclass::Subclass() 
{ 
    x = 5; 
} 
2

Add extern dec在class'cpp中插入x,然后编译器会在其他cpp文件本身中找到x的定义。

变化不大的代码:

Main.cpp的

#include "class.h" 

int x = 10; 

int main() 
{ 
    return 0; 
} 

示例类的CPP

#include "class.h" 

extern int x; 

Subclass::Subclass() 
{ 
    x = 5; 
} 

头文件class.h

class Subclass { 
public: 
    Subclass(); 
}; 

而对于EXTERN关键字,参考这个:How do I use extern to share variables between source files?

+0

我这样做了,现在它说undefined引用'x'而不是 – Rapture686

+0

@ user2548588有趣的是,它对我有用。至少你应该在头文件中有一个类声明,并且包含两个cpp文件,对吧?更具体地说,我编辑了我的答案。 – lulyon

1

C++不是java。你在这里没有主类,并且从类中的方法访问全局变量不是问题。问题在于访问另一个编译单元(另一个源文件)中定义的变量。

解决这个问题的方法是确保变量是在你使用它的编译单元中定义的,就像Vaughn Cato建议的(当我输入这个时)。