| 发表于: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对象呀 实在搞不懂,还请高人多多指教 |
|
|
|
|