使用g ++在同一目录下使用.cpp编译.h,错误
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用g ++在同一目录下使用.cpp编译.h,错误相关的知识,希望对你有一定的参考价值。
我正在学习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;
}
问题:当我使用test.cpp
或使用g++ test.cpp
编译g++ test.cpp matrix.cpp
文件时,我得到错误:warning: inline function 'Matrix::operator()' is not defined
和ld: symbol(s) not found for architecture x86_64
。
问题:什么失败了?我怎么能理解发生了什么?谢谢你的帮助!
答案
inline
函数的主体应该在函数的所有调用中都可见。
在您的设置中,您需要将这两个内联定义从matrix.cpp
移动到matrix.h
;或使它们非内联。
以上是关于使用g ++在同一目录下使用.cpp编译.h,错误的主要内容,如果未能解决你的问题,请参考以下文章
使用makefile编译多个文件(.c , .cpp , .h等)