读书人

构造函数中向量的初始化,该怎么处理

发布时间: 2012-03-02 14:40:29 作者: rapoo

构造函数中向量的初始化
请教:
我编写了一个类:
1、可是在构造函数中给向量赋初值时总出现错误,如何给这个向量初始化?
2、在复数和实数运算中,总出现类型不匹配,为什么?
程序如下:
//
#include <iostream>
#include <cmath>
#include <complex>
#include <vector>

using namespace std;
typedef double dbl;
typedef complex <double> cdbl;
class Nlayer
{
public:
Nlayer(unsigned i_n,
vector <dbl> & i_p,
vector <dbl> & i_h);
~Nlayer();
//计算单个频率下地表视电阻率
void caculate_ps(dbl w, //单个角频率
dbl ps); //视电阻率
// vector <cdbl> & Zn); //层阻抗
//计算一系列频率下地表视电阻率
void caculate_ps(vector <dbl> & ws, //w:频率向量
vector <dbl> & pss, //pss:层电阻率向量
// vector <cdbl> & wZn, //层阻抗
unsigned m); //m:频点数

private:
unsigned int n; //地层数
vector <dbl> p; //层电阻率
vector <dbl> h; //层厚度


static const dbl u0=1.256e-6; //磁导率
};
//-------------------------
Nlayer::Nlayer(unsigned int i_n,
vector <dbl> i_p,
vector <dbl> i_h)
{
n=i_n;
p=i_p;
h=i_h;
}
//-------------------------
inline
void Nlayer::caculate_ps(dbl w, //单个角频率
dbl ps) //视电阻率
// vector <cdbl> & Zn); //层阻抗
{
cdbl k(0.0,sqrt(w*u0/p[n-1])); //k:波数 ,k2:波数的平方
cdbl Zom(0,w*u0); //
cdbl ZZ(0,sqrt(w*u0/p[n-1])); //中间变量
cdbl Zn;
Zom=-Zom/k;
for(unsigned int i=n-2; i> =0; ++i)
{
Zn=Zom*(1+((ZZ-Zom)/(ZZ+Zom))*(exp(-2.0*k*h[i])))/(1-((ZZ-Zom)/(ZZ+Zom))*(exp(-2.0*k*h[i])));
k=(0,sqrt(w*u0/p[i]));


Zom=-w*u0/k;
ZZ=Zn;
}
ps=abs(Zn)*abs(Zn)/(w*u0);
return;

}
//-----------------------------
inline
void Nlayer::caculate_ps(vector <dbl> & ws, //w:频率向量
vector <dbl> & pss, //pss:层电阻率向量
// vector <cdbl> & wZn, //层阻抗
unsigned m) //m:频点数
{
for(unsigned i=0; i <m; ++i)
{
dbl w1=ws[i];
dbl pr=0;
this-> caculate_ps(w1,pr);
pss[i]=pr;
}
}

37 D:\C++学习\C++class\MTlayerRes\Nlayer.h prototype for ` Nlayer::Nlayer(unsigned int, std::vector <dbl, std::allocator <dbl> > ,
error D:\C++学习\C++class\MTlayerRes\Nlayer.h:11 candidates are: Nlayer::Nlayer(const Nlayer&)
15 D:\C++学习\C++class\MTlayerRes\Nlayer.h Nlayer::Nlayer(unsigned int, std::vector <dbl, std::allocator <dbl> > &,
D:\C++学习\C++class\MTlayerRes\Nlayer.h In member function `void Nlayer::caculate_ps(double, double) ':
55 D:\C++学习\C++class\MTlayerRes\Nlayer.h no match for 'operator+ ' in '1 + std::operator*(const std::complex <_Tp> &, const std::complex <_Tp> &)
55 D:\C++学习\C++class\MTlayerRes\Nlayer.h no match for 'operator- ' in '1 - std::operator*(const std::complex <_Tp> &, const std::complex <_Tp> &)




[解决办法]
Nlayer(unsigned i_n,vector <dbl> & i_p,vector <dbl> & i_h);
[解决办法]
你是这样声明,后面定义确不一样..(&)
[解决办法]
Nlayer::Nlayer(unsigned int i_n,
vector <dbl> & i_p,
vector <dbl> & i_h)
:n(i_n),p(i_P),h(i_h){}

读书人网 >C++

热点推荐