多个符号定义,但我只定义了一次符号

时间:2014-03-21 20:01:56

标签: c++ linker codeblocks

我在使用头文件中的类编译程序时遇到了一些问题。我相信我正确地设置了项目和链接器设置,但似乎无论我尝试什么,它都会给我一个错误。我在各个论坛上搜索过,而且我的智慧结束了......

一些背景信息:我的IDE是code :: blocks(用于windows),在链接器设置中我包含了“header.o”和“Main.o”

代码:

Main.cpp的:

#include<iostream>
#include"Header.h"

using namespace std;

int main()
{

Pizza ob;

}

Header.h:

#ifndef HEADER_H
#define HEADER_H

class Pizza
{

public:

Pizza();

protected:
private:

};

#endif

header.cpp:

#include "Header.h"
#include <iostream>

using namespace std;

Pizza::Pizza()
{
cout << "linked!";
}

编译时遇到的错误:

obj\Debug\Header.o||In function `ZN5PizzaC2Ev':|
H:\New Build Target pro\Headertest\Header.cpp|6|multiple definition of `Pizza::Pizza()'|
obj\Debug\Header.o:H:\New Build Target pro\Headertest\Header.cpp|6|first defined here|
obj\Debug\Header.o||In function `ZN5PizzaC2Ev':|
H:\New Build Target pro\Headertest\Header.cpp|6|multiple definition of `Pizza::Pizza()'|
obj\Debug\Header.o:H:\New Build Target pro\Headertest\Header.cpp|6|first defined here|
obj\Debug\Main.o||In function `main':|
H:\New Build Target pro\Headertest\Main.cpp|8|multiple definition of `main'|
obj\Debug\Main.o:H:\New Build Target pro\Headertest\Main.cpp|8|first defined here|
||=== Build finished: 6 errors, 0 warnings (0 minutes, 7 seconds) ===|

这就是我所做的一切。我搜索了这些错误,几乎没有提出任何问题。请帮助,如果我还应该提供更多信息,请向我询问。

1 个答案:

答案 0 :(得分:1)

  链接器设置中的

我已经包含了&#34; header.o&#34;和&#34; Main.o&#34;

唐&#39;吨。自从我使用Code :: Blocks以来已经有一段时间了,但通常每个IDE都会根据正在编译的源文件自动设置链接器行,很可能是Code :: Blocks已包含&#34; header.o&#34;和#34; Main.o&#34;对你而言。

如果您已经明确添加了这两个目标文件,那么您已经有效地将它们添加到链接行两次,并且链接器会看到符号被定义两次并抱怨。

让IDE在那里完成工作,您不必显式指定目标文件。 (而且,在大多数情况下,一般情况下,启动新项目时的默认设置应该足以让您立即开始。)