您的位置:程序门 -> c/c++ -> c++ 语言



c2663错误


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


c2663错误
发表于:2008-01-22 10:37:44 楼主
大家好,我这里有个问题,还请多多指教,以下是简化了的代码

class   clarc;
class   clnode;

头文件
//   larcptr是指向clarc对象的句柄
class   larcptr   {
public:
larcptr():p(0),   use(new   std::size_t(1))   {   }
larcptr(clarc   &arc):p(&arc),use(new   std::size_t(1)){}
larcptr(const   larcptr   &i):p(i.p),   use(i.use)   {   ++*use;   }
~larcptr()   {   decr_use();   }
larcptr&   operator=(const   larcptr&);
const   clarc   *operator-> ()   const   {   if   (p)   return   p;
else   throw   std::logic_error("unbound   larcptr");   }
const   clarc   &operator*()   const   {   if   (p)   return   *p;
else   throw   std::logic_error("unbound   larcptr");   }

protected:
clarc   *p;   //   pointer   to   shared   item
std::size_t   *use;
void   decr_use()
{   if   (--*use   ==   0)   {   delete   p;   delete   use;   }   }
};

class   clarc   {

friend   clnode;
friend   lnodeptr;
public:
clarc():start(),end(),preendtim(0.0),endtim(0.0),
farc(),parc(),aclike(0.0),nalign(0),score(0.0),
prlike(0.0),fwrd(),word(""),backbiprb(0.0),forbiprb(0.0){}
clarc(const   clarc&);
virtual   ~clarc(){}

const   larcptr&   getfwrd()   const   {return   fwrd;}  

clarc&   setfwrd   (clarc&   item){fwrd=larcptr(item);   }
clarc&   setfwrd()   {fwrd   =   larcptr(*this);     }
clarc&   setfwrd(larcptr   &itemptr){fwrd=itemptr;}

protected:
larcptr   fwrd;

};


cpp文件的一个函数

void   initialize(a_v_type   &vlarcs,   n_v_type   &vlnodes,   lattice   *lat)
{

                stable_sort_arcnode(lat-> larcs,   lat-> lnodes,   vlarcs,   vlnodes,   cmpendstrtim,   cmpnodetim);//这个是对vlarcs   和vlnodes排序,因为涉及其它问题,所以是自己写的程序。
//   函数原型为   void   stable_sort_arcnode(larc   *larcs,   lnode   *,vector <clarc>   &va,   vector <clnode>   &vn,   comparc   comp1, compnode   comp2);
//其中的comparc和   compnode   是函数指针,至于larc   和   lnode   是两个指向结构体数组的指针。

for   (arc_iter_type   iter=vlarcs.begin();iter!=vlarcs.end();++iter){
iter-> setfwrd();
}

stable_sort(vlarcs.begin(),vlarcs.end(),cmpendtim1);

vector <larcptr>   fwrdcopv;

arcptr_size_type   i=0;   //   typedef   vector <larcptr> ::size_type   arcptr_size_type;

for   (arc_iter_type   iter=vlarcs.begin();iter!=vlarcs.end();++iter){
fwrdcopv.push_back(iter-> getfwrd());
}

arcptr_size_type   i=0;//   typedef   vector <larcptr> ::size_type   arcptr_size_type;

for   (arc_iter_type   iter=vlarcs.begin();iter!=vlarcs.end();++iter){
if   (&(*(iter-> getfwrd()))!=&(*iter)){
(*(fwrdcopv[i])).setfwrd(*iter);     --------------------》出现c2663错误的语句
}
++i;
}
}

编译时出现c2663错误,如下compiling   htklib...
compiling   hgraph.cpp
hgraph.cpp
hgraph.cpp(183)   :   error   c2663:   'clarc::setfwrd'   :   3   overloads   have   no   legal   conv
ersion   for   'this'   pointer
hgraph.cpp(193)   :   error   c2780:   '_fwdit   std::max_element(_fwdit,_fwdit,_pr)'   :   ex
pects   3   arguments   -   1   provided
                c:\program   files\microsoft   visual   studio   8\vc\include\algorithm(3786)   :
see   declaration   of   'std::max_element'
hgraph.cpp(193)   :   error   c2780:   '_fwdit   std::max_element(_fwdit,_fwdit)'   :   expect
s   2   arguments   -   1   provided
......省略......

其中的第一个错误c2663错误,我上网查了一下,基本上是发生在用const对象调用非const成员函数的情况下,可是出错的那行代码中,我没有使用const对象呀

实在搞不懂,还请高人多多指教
发表于:2008-01-22 10:59:131楼 得分:0
编译时出现c2663错误,如下compiling       htklib...  
compiling       hgraph.cpp  
hgraph.cpp  
hgraph.cpp(183)       :       error       c2663:       'clarc::setfwrd'       :       3       overloads       have       no       legal       conv  
ersion       for       'this'       pointer  
hgraph.cpp(193)       :       error       c2780:       '_fwdit       std::max_element(_fwdit,_fwdit,_pr)'       :       ex  
pects       3       arguments       -       1       provided  
                                c:\program       files\microsoft       visual       studio       8\vc\include\algorithm(3786)       :  
see       declaration       of       'std::max_element'  
hgraph.cpp(193)       :       error       c2780:       '_fwdit       std::max_element(_fwdit,_fwdit)'       :       expect  
s       2       arguments       -       1       provided  
......省略......  

其中的第一个错误c2663错误,我上网查了一下,说是基本上是发生在用const对象调用非const成员函数的情况下,可是出错的那行代码中,我没有使用const对象呀  

实在搞不懂,还请高人多多指教
发表于:2008-01-22 11:43:522楼 得分:0
const       clarc       *operator->   ()       const       {       if       (p)       return       p;  
else       throw       std::logic_error("unbound       larcptr");       }  
在这里。
提供一个非const版本
发表于:2008-01-22 20:16:013楼 得分:0
多谢楼上了,呵呵,真强呀



快速检索

最新资讯
热门点击