我在使用头文件中的类编译程序时遇到了一些问题。我相信我正确地设置了项目和链接器设置,但似乎无论我尝试什么,它都会给我一个错误。我在各个论坛上搜索过,而且我的智慧结束了......
一些背景信息:我的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) ===|
这就是我所做的一切。我搜索了这些错误,几乎没有提出任何问题。请帮助,如果我还应该提供更多信息,请向我询问。
答案 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在那里完成工作,您不必显式指定目标文件。 (而且,在大多数情况下,一般情况下,启动新项目时的默认设置应该足以让您立即开始。)