gpt4 book ai didi

c++ - 在同一目录上使用 g++ 将 .h 与 .cpp 编译,错误

转载 作者:行者123 更新时间:2023-11-27 22:42:08 26 4
gpt4 key购买 nike

我正在学习 C++,我在 .h 文件中有一个类声明,在 .cpp 文件中有定义。 .h文件如下:

// matrix.h

class Matrix {
private:
int r; // number of rows
int c; // number of columns
double* d;
public:
Matrix(int nrows, int ncols, double ini = 0.0); // declaration of the constructor
~Matrix(); // declaration of the destructor
inline double operator()(int i, int j) const;
inline double& operator()(int i, int j);
};

.cpp 是:

// matrix.cpp

#include "matrix.h"

Matrix::Matrix(int nrows, int ncols, double ini) {
r = nrows;
c = ncols;
d = new double[nrows*ncols];
for (int i = 0; i < nrows*ncols; i++) d[i] = ini;
}

Matrix::~Matrix() {
delete[] d;
}

inline double Matrix::operator()(int i, int j) const {
return d[i*c+j];
}

inline double& Matrix::operator()(int i, int j) {
return d[i*c+j];
}

测试文件是:

// test.cpp
#include <iostream>
#include "matrix.h"

using namespace std;

int main(int argc, char *argv[]) {
Matrix neo(2,2,1.0);
cout << (neo(0,0) = 2.34) << endl;
return EXIT_SUCCESS;
}

问题:当我使用g++ test.cpp 或使用g++ test.cpp 矩阵编译test.cpp 文件时.cpp,我收到错误:warning: inline function 'Matrix::operator()' is not defined and ld: symbol(s) not found for architecture x86_64.

问题什么是失败的?我如何理解正在发生的事情?感谢您的帮助!

最佳答案

内联函数的主体应该在函数的所有调用点可见。

在您的设置中,您需要将这两个内联定义从 matrix.cpp 移动到 matrix.h ;或使它们成为非内联的。

关于c++ - 在同一目录上使用 g++ 将 .h 与 .cpp 编译,错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47917397/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com