5

这不是我正在处理的实际代码,而是我编写的示例代码以了解我做错了什么。所以我有三个文件main.cppfavourite.cppfavourite.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一样编译它我不确定是否需要以不同的方式编译它,因为我正在使用自定义头文件。

4

2 回答 2

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意味着:仅编译,无需链接,并且-ofilename是必需的,因为您希望将输出写入两个不同的目标文件以将它们与最后一个命令链接。

您还可以添加其他标志,最重要的是:

-Wall -Wextra -O3
于 2013-09-15T06:46:28.217 回答
0

哦,我想我看到了错误,尽管您应该将其包含在您的问题中。

编译多个源文件时,您需要在 GCC 命令行上将它们全部列出。或者您可以使用 Makefile。

所以你可以这样做:

g++ favourite.cpp main.cpp

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

all: program
program: main.o favourite.o

然后只需键入:

make
于 2013-09-15T06:47:26.360 回答