2010-07-16 54 views
11

我使用的extern从另一个类获取变量,它对于int的,浮动的等正常工作......Extern Struct?

但是,这并不工作,我不知道如何做到这一点:

Class1.cpp

struct MyStruct { 
int x; 
} 

MyStruct theVar; 

Class2.cpp

extern MyStruct theVar; 

void test() { 
int t = theVar.x; 
} 

它不起作用,因为Class2中不知道MYSTRUCT是什么。

我该如何解决这个问题? :/

我试过在Class2.cpp中声明相同的结构,然后编译它,但是这些值是错误的。

回答

17

您将struct MyStruct类型声明放在.h文件中,并将其包含在class1.cpp和class2.cpp中。

督察:

Myst.h

struct MyStruct { 
int x; 
}; 

Class1.cpp

#include "Myst.h" 

MyStruct theVar; 

Class2.cpp

#include "Myst.h" 

extern struct MyStruct theVar; 

void test() { 
int t = theVar.x; 
} 
+0

谢谢,现在工作很好:) – 2010-07-17 13:48:26

+0

结构的定义是否也应该在头部?或者可以将定义分解为源.cpp? – cjcurrie 2013-01-10 23:20:00

+0

感谢它帮助 – achoora 2016-07-14 12:51:14

0

你需要在一个类中首先定义你的结构或通用头文件。请确保您包含此初始定义,例如通过#include "Class1.h"

然后,你需要修改你的声明说extern struct MyStruct theVar;

这种说法并不需要在头文件。它可以是全球性的。

编辑:一些.CPP文件需要包含原始声明。所有的extern都是告诉编译器/链接器相信你在其他地方存在,并且在程序建立时它会找到有效的定义。如果你没有在某个地方定义struct MyStruct theVar,那么当它到达链接器时,它可能无法完全编译。

+2

这足以告诉编译器'MyStruct'存在,但只要您尝试访问任何成员就会失败。 – 2010-07-16 15:55:50