BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #88679同步于 2015/9/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

C++类中动态数组赋值问题

sharonyue
2015/9/18镜像同步1 回复
这个是H文件,忽略fvCFD那个 #include "fvCFD.H" #ifndef KDF_H #define KDF_H class KDF { private: //- Disallow default bitwise copy construct KDF(const KDF&); //- Disallow default bitwise assignment void operator=(const KDF&); protected: //- Number of nodes const int nodes_; //- Value of sigma const double sigma_; //- moments const double* momentsOri_; public: //- Construct from components KDF ( const int nodes, const double sigma, const double* momentsOri ); //- Destructor ~KDF(); //- Gaussian method, mementsOri to momentStar void gaussian ( const double* momentStar ); }; #endif 这个是C文件 #include "KDF.H" KDF::KDF ( const int nodes, const double sigma, const double* momentsOri ): nodes_(nodes), sigma_(sigma), momentsOri_(new double(2*nodes + 1)) { momentsOri_ = momentsOri; } KDF::~KDF() {}; void KDF::gaussian(const double* momentStar) { if(nodes_ == 3) { momentStar[0] = momentsOri_[0]; momentStar[1] = momentsOri_[1]; momentStar[2] = momentsOri_[2] - momentsOri_[0]*Foam::sqr(sigma_); momentStar[3] = momentsOri_[3] - 3*momentsOri_[1]*Foam::sqr(sigma_); momentStar[4] = momentsOri_[4] - 6*momentsOri_[2]*Foam::sqr(sigma_) + 3*momentsOri_[0]*Foam::sqr(Foam::sqr(sigma_)); momentStar[5] = momentsOri_[5] - 10*momentsOri_[3]*Foam::sqr(sigma_) + 15*momentsOri_[1]*Foam::sqr(Foam::sqr(sigma_)); momentStar[6] = momentsOri_[6] - 15*momentsOri_[4]*Foam::sqr(sigma_) + 45*momentsOri_[2]*Foam::sqr(Foam::sqr(sigma_)) - 15*momentsOri_[0]*Foam::pow(sigma_, 6.0); } else if(nodes_ == 4) { } }; 如果把这一段注释掉,其他都没问题: if(nodes_ == 3) { momentStar[0] = momentsOri_[0]; momentStar[1] = momentsOri_[1]; momentStar[2] = momentsOri_[2] - momentsOri_[0]*Foam::sqr(sigma_); momentStar[3] = momentsOri_[3] - 3*momentsOri_[1]*Foam::sqr(sigma_); momentStar[4] = momentsOri_[4] - 6*momentsOri_[2]*Foam::sqr(sigma_) + 3*momentsOri_[0]*Foam::sqr(Foam::sqr(sigma_)); momentStar[5] = momentsOri_[5] - 10*momentsOri_[3]*Foam::sqr(sigma_) + 15*momentsOri_[1]*Foam::sqr(Foam::sqr(sigma_)); momentStar[6] = momentsOri_[6] - 15*momentsOri_[4]*Foam::sqr(sigma_) + 45*momentsOri_[2]*Foam::sqr(Foam::sqr(sigma_)) - 15*momentsOri_[0]*Foam::pow(sigma_, 6.0); } else if(nodes_ == 4) { } 这一段的目的,就是通过这个函数,把传进来的数组,使用私有成员数组进行赋值。 比如就是把类的私有成员数组赋值给传入的数组。 报错: KDF.C: In member function ‘void KDF::gaussian(const double*)’: KDF.C:32:42: error: lvalue required as left operand of assignment &momentStar[0] = &momentsOri_[0]; ^ KDF.C:33:41: error: assignment of read-only location ‘*(momentStar + 8u)’ momentStar[1] = momentsOri_[1]; ^ KDF.C:34:41: error: assignment of read-only location ‘*(momentStar + 16u)’ momentStar[2] = momentsOri_[2] - momentsOri_[0]*Foam::sqr(sigma_); 有没有感兴趣的。。。
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
sharonyue机器人#1 · 2015/9/18
好了 去掉const好了。 打扰了......