2017-02-10 60 views
-2

C++初学者在这里。变量的多重定义

我正在写一个简单的程序,其在三个薄片分为:

foo.h中(#包括所有需要的库,所有的程序的变量和各个函数的声明)

Foo.cpp中(#包括foo.h中,包含了foo.h功能定义)

main.cpp中(#包括当然foo.h中,并且包含主函数)

予编译命令:克++ * CPP -o时间

我得到的错误是:

/tmp/cc0sNZgq.o:(.bss+0x0):VARIABLENAME的”多个定义对于在foo.h中声明的每个变量,'。其次:

collect2:错误:LD返回1退出状态

注:我已经把包含头文件foo.h中后卫

我想有其中载有头所有变量和函数声明,以便main.cpp保持尽可能简单和干净。

我在网上查找并找不到解决方案。

+1

您在头文件中有变量的*定义*,而不仅仅是*声明*。所以你的定义出现在两个编译文件中。 [请阅读'extern'关键字。](http://en.cppreference.com/w/cpp/language/storage_duration),或者创建一个类的变量'static'成员。 – BoBTFish

+0

欢迎使用堆栈溢出。请花些时间阅读[The Tour](http://stackoverflow.com/tour),并参阅[帮助中心](http://stackoverflow.com/help/asking)中的资料,了解您可以在这里问。 –

回答

3

不要把你的变量放到头文件中。这将意味着包含头文件的每个.cpp文件都将拥有自己的变量副本。

如果要跨多个.cpp共享全局变量,则应声明它们在一个.cpp中,并在头文件中使用extern。但我建议不要使用全局变量,除非它是绝对必要的。

+0

谢谢你的回答。我应该把他们放在哪里? ** foo.cpp **和** main.cpp **都需要它们。 – mdvlln

+0

把它们放在.cpp文件中,并在其他地方使用extern。 – Karthik

+0

好像'foo.h'和'foo.cpp'作为一个单独的组件一起使用,所以把'extern'的声明放在'foo.h'中,并且'foo.cpp'中的定义放在一起。如果他们不是一个单一的组件,那么给他们不同的名字! – BoBTFish