我应该包括<complex>在哪里



我有几个头/源文件:FUNCS.h和FUNCS.cpp、MIX.cpp和main.cpp.在函数和我的MIX类中应该有复杂的库,但当我试图将其包含在我的MIX.h中时,例如,我会错误地认为复杂不是模板。我应该在哪里包括库,这样我的所有标题都会将complex定义为模板?示例:

#pragma once
#include <complex>
class MATRIX
{
friend MATRIX sum(MATRIX a, MATRIX b);
friend MATRIX mult(MATRIX a, MATRIX b);
friend MATRIX vi4(MATRIX a, MATRIX b);
friend MATRIX operator * (const MATRIX& a, complex<int> b);
friend MATRIX operator * (complex<int> b, const MATRIX& a);
private:
complex<int>** M;
int m;
int n;
public:
MATRIX();
MATRIX(int _m, int _n);
MATRIX(int _m);
MATRIX(const MATRIX& _M);
complex<int> get(int i, int j);
void set(int i, int j, complex<int> value);
void Print();
MATRIX operator=(const MATRIX& _M);
complex<int>* operator[] (int index);
~MATRIX();
};

<complex>中定义的是std::complex,您尝试使用的是complex,编译器在全局范围中找不到称为complex的东西。


更改

friend MATRIX operator * (complex<int> b, const MATRIX& a);

friend MATRIX operator * (std::complex<int> b, const MATRIX& a);

或通过介绍名称

using std::complex;

但不要在头球中那样做!相反,只将其放在源文件中。不在报头中这样做的原因是,包括报头的所有其它代码将";inherit";从长远来看,这将导致问题。


应该包含在每个使用std::complex的文件中的头。

请注意,有时您可以间接地包含它,如:a.h包括<complex>b.h包括a.h,因此它可以使用std::complex而不必解释性地包含<complex>。不要依赖它!从长远来看,这会造成麻烦。

进一步注意,通常远期申报就足够了。它超出了您在示例中的内容,但为了完整性起见,我提到它。当您只使用指向类型的指针和引用时,就不需要在标头中定义。在这种情况下,声明就足够了,并且头只能包含在源中。这可以减少大型项目的编译时间。

我应该在哪里包括<complex>

在使用该文件声明的每个文件中,在这些使用之前。按照惯例,头文件包括在文件的开头(头(

complex<int>** M;

我得到一个错误,复杂不是一个模板。

<complex>没有声明::complex。它声明std::complex。请改用std::complex

最新更新