提问人:MegAmaNeo1 提问时间:7/15/2021 最后编辑:MegAmaNeo1 更新时间:7/16/2021 访问量:252
将 2D 数组传递给函数时未定义引用
Undefined reference when passing 2D array to function
问:
我正在编写一个代码,该代码采用二维数组并将它们放入函数中。然后他们正在用它做一些事情并更新它。然而,由于我不知道的原因,即使我花了很多时间阅读人们解释如何正确链接 .cpp 和 .h 文件的线程,我还是得到了一个未定义的引用错误。让我向您展示简化的代码:
标头.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
标头 .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 64 位
答:
0赞
CasualCay
7/16/2021
#1
不好意思
如果这段代码是专业的,我不会让它通过审查:
- 您没有使用 std::array
- 您使用的是随机常量 206,而不是以这种方式声明它
- 您正在遍历一个可能有 206xN 大的矩阵。但是,您正在遍历一些可能等于 206 的“行”数。因此,您可能应该相应地使用“行”。
- 从“缓存”访问某些成员的代码块是残酷的。我会解雇那些让我写这样代码的人。
- 1.60218E-13*1E45可能是一些非常重要的物理常数。我会在一些合适的标题中定义它一次。它可能被描述为1.60218e-32。
- 在您的主要函数中:那个不祥的“行”参数从何而来?
- 通常,当你定义一个“Getter”函数时,你会得到一些东西。你的函数没有提供任何东西,它是无效的。
评论
0赞
MegAmaNeo1
7/16/2021
我一直很欣赏这样的直接反馈,谢谢你。(虽然在我看来语气有点不对劲,因为我从未声称自己是专业人士)。我认为行参数来自标题,这也有效。你知道我得到的问题的性质是什么吗?为什么我使用缓存的块如此糟糕?
评论
header.cpp
main.cpp