我正在尝试为自己创建一个通用函数文件。我想做得对,所以没有#include .cpp但是.h文件。但是我总是导致未定义的引用。我用以下三个文件复制了它:
main.cpp:
#include <iostream>
#include "functions.h"
using namespace std;
int main()
{
cout << addNumbers(5,6);
}
functions.h:
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
int addNumbers(int x,int y);
#endif
functions.cpp:
#include "functions.h"
using namespace std;
int addNumbers(int x, int y)
{
return x+y;
}
这些文件都在一个文件夹中。我正在使用Linux Mint,geany和c ++ 11。 编译导致以下错误:
main.cpp :(。text + 0xf):对“addNumbers(int,int)”的未定义引用
不幸的是,我只发现了有关在线课程的类似问题。我到目前为止理解这是一个链接问题,虽然我对编译过程的这一部分一无所知。在main()之前或之后通过原型设计将函数添加到.cpp可以正常工作。这个问题Undefined reference C++似乎很相似,但我不明白答案。
我的问题是:
我该如何解决这个问题? (我不希望将函数包装在类中或将它们添加到main.cpp中)
如果可能的话,可以解释这里出了什么问题。
我想知道我是否也可以使用::调用特定函数,因为我已经看过它但从未使用它,因为我不知道它是如何工作的。
谢谢
答案 0 :(得分:2)
不确定geany是如何工作的,但基本阶段(在命令行上)是:
g++ -c functions.cpp
g++ -c main.cpp
g++ -o myprog functions.o main.o
从geany手册中,似乎构建仅适用于单文件程序(粗体是我的):
对于可编译语言(如C和C ++),Build命令将为 将当前源文件等效对象文件链接到 可执行文件。如果目标文件不存在,则源将是 一步编译和链接,只生成可执行二进制文件。
和
如果您的构建系统需要复杂的设置,或者需要几个 不同的设置,然后编写一个Makefile并使用Make 建议使用命令;这也将使用户更容易 构建您的软件
问题的工作makefile是:
Makefile:
objects = main.o functions.o
AddingNumbersExe : $(objects)
g++ -o AddingNumbersExe $(objects)
main.o : main.cpp functions.h
g++ -c main.cpp
functions.o : functions.cpp functions.h
g++ -c functions.cpp
.PHONY : clean
clean :
-rm AddingNumbersExe $(objects)
创建此文件后,&#34; make&#34;在geany工作中选项(Ctrl + F9)。
因此,为了处理您的双文件程序,您需要一个Makefile或更强大的IDE。