首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-02 
构造函数中向量的初始化请教:我编写了一个类:1、可是在构造函数中给向量赋初值时总出现错误,如何给这个向量

构造函数中向量的初始化
请教:
我编写了一个类:
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){}

热点排行