在C ++中一起编译源文件和头文件时出错

时间:2013-09-15 06:42:26

标签: c++ header compiler-errors header-files

这不是我正在处理的实际代码,而是我编写的示例代码,用于理解我做错了什么。所以我有三个文件 main.cpp favourite.cpp favourite.h 即可。我正在尝试编译main.cpp但得到一些奇怪的错误。

// main.cpp文件

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

using namespace std;

int main()
{
    favNum(12);

}

// favourite.cpp文件

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

using namespace std;

void favNum(int num)
{
    cout << "My Favourate number is " << num << endl;
}

// favourite.h文件

#ifndef FAVOURITE_H
#define FAVOURITE_H

void favNum(int num);

#endif

所有文件都在同一个文件夹中,我正在编译它通常像 g ++ main.cpp 我不确定是否需要编译它,因为我使用的是自定义头文件。

2 个答案:

答案 0 :(得分:5)

如果您说g++ main.cpp并且这是您的整个命令行,则错误是链接器错误,它无法找到favNum,对吧?在这种情况下,请尝试:

g++ main.cpp favourite.cpp

或拆分编译和链接:

g++ -c main.cpp -o main.o
g++ -c favourite.cpp -o favourite.o
g++ main.o favourite.o

其中-c表示:仅编译,不需要链接,-o filename 是必需的,因为您要将输出写入两个不同的目标文件以进行链接他们用最后一个命令。

您可能还会添加其他标记,其中最重要的是:

-Wall -Wextra -O3

答案 1 :(得分:0)

哦,我想我看到了错误,尽管你应该把它包含在你的问题中。

编译多个源文件时,需要在GCC命令行中列出所有源文件。或者你可以使用Makefile。

所以你可以这样做:

g++ favourite.cpp main.cpp

或者您可以像这样写一个Makefile:

all: program
program: main.o favourite.o

然后输入:

make