外部结构?

时间:2010-07-16 15:45:19

标签: c++

我正在使用extern从另一个类中获取变量,它适用于int,float等......

但这不起作用,我不知道该怎么做:

Class1.cpp

struct MyStruct {
 int x;
}

MyStruct theVar;

Class2.cpp

extern MyStruct theVar;

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

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

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

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

2 个答案:

答案 0 :(得分:22)

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

IOW:

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;
}

答案 1 :(得分:0)

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

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

此语句不需要位于头文件中。它可以是全球性的。

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