【发布时间】:2021-09-24 11:59:43
【问题描述】:
我正在编写一个代码,它采用二维数组并将它们放入函数中。然后他们用它做一些事情并更新它。然而,由于我不知道的原因,即使我花了很多时间阅读人们解释如何正确链接 .cpp 和 .h 文件的线程,我仍然收到未定义的引用错误。让我给你看一下简化的代码:
header.h
#ifndef HEADER_H
#define HEADER_H
const int N = 2;
const int rows = 206;
const double ptoSI = 2;
void getEOS(double etable[206][N], double ptable[206][N], double c_stable[206][N]);
#endif // HEADER_H
header.cpp
#include <iostream>
#include <fstream>
#include <math.h>
#include "header.h"
using namespace std;
void getEOS(double etable[206][N], double ptable[206][N], double c_stable[206][N]){
for (int i = 0; i<rows; i++){
for (int j = 0; j<N; j++){
etable[i][j] = cache[i][j*3]*1.60218E-13*1E45*1.0/(ptoSI);
ptable[i][j] = cache[i][j*3+1]*1.60218E-13*1E45*1.0/(ptoSI);
c_stable[i][j] = cache[i][j*3+2];
}
}
}
main.cpp
#include <iostream>
#include "header.h"
using namespace std;
int main()
{
double etable[rows][N];
double ptable[rows][N];
double c_stable[rows][N];
getEOS(etable,ptable,c_stable);
}
错误详细解读:
/usr/bin/ld: main.o: in function `main':
/home/tux/build-testtext-Desktop_Qt_5_15_2_GCC_64bit-Debug/../testtext/main.cpp:13: undefined reference to `getEOS(double (*) [2], double (*) [2], double (*) [2])'
collect2: error: ld returned 1 exit status
make: *** [Makefile:274: testtext] Error 1
即使我正确地声明和定义了函数,为什么他对此有问题?
任何帮助将不胜感激......
.pro 文件:
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG -= qt
SOURCES += \
header.cpp \
main.cpp
HEADERS += \
header.h
我正在使用以下套件: 桌面 Qt %{Qt:Version} GCC 64bit
【问题讨论】:
-
您很可能没有将
header.cpp链接到main.cpp。你用的是什么编译器? -
我在 Qt Creator IDE 中使用 g++
-
套件位于工具/选项/套件中。您必须选择一个来构建您的项目。您还可以从“编译器输出”选项卡中复制粘贴完整的错误文本。
-
好的,我把它加到帖子里了
-
如果将所有代码移到同一个文件中,是否会出现同样的错误?
标签: c++ arrays function compiler-errors undefined-reference