这个哪儿错了???
两个array实现+,*和scalar(放大)操作
编译不通过
- C/C++ code
#include<cassert>#include<iostream>template<typename T>class SArray{private: T* storage; size_t storage_size;protected: void init(){ for(size_t idx=0;idx<size();idx++){ storage[idx]=T(); } } void copy(SArray<T> const& orig){ assert(size()==orig.size()); for(size_t idx=0;idx<size();idx++){storage[idx]=orig[idx];} }public: size_t size(){return storage_size;} SArray(size_t s):storage(new T[s]),storage_size(s){init();} T operator[](size_t i){return storage[i];} ~SArray(){delete[] storage;} SArray<T>& operator=(SArray<T>& orig){ if(this!=&orig){copy(orig);} return *this; } };template<typename T>SArray<T> operator+(SArray<T>& op1,SArray<T>& op2){ assert(op1.size()==op2.size()); SArray<T> result(op1.size()); for(size_t idx=0;idx<op1.size();idx++){ result[idx]=op1[idx]+op2[idx]; } return result;}template<typename T>SArray<T> operator*(SArray<T>& op1,SArray<T>& op2){ assert(op1.size()==op2.size()); SArray<T> result(op1.size()); for(size_t idx=0;idx<op1.size();idx++){ result[idx]=op1[idx]*op2[idx]; } return result;}template<typename T>SArray<T> operator*(T const& s,SArray<T>& op){ SArray<T> result(op.size()); for(size_t idx=0;idx<op.size();idx++){ result[idx]=s*op[idx]; } return result;}template<typename T>void show(SArray<T>& s){ for(size_t idx=0;idx<s.size();idx++){ std::cout<<s[idx]<<" "; } std::cout<<std::endl;}int main(){ SArray<double> op1(3); SArray<double> op2(3); SArray<double> result(3); result=op1*op2; show(result); system("pause");return 0;}
[解决办法]
最好还是自己调,人毕竟不是编译器
能看出来的有
SArray<T>& operator=(SArray<T>& orig)
而result=op1*op2;里面右边的表达式返回的是rvalue,不能当做引用
T operator[](size_t i){return storage[i];}
result[idx]=op1[idx]+op2[idx];
同样的道理这里应该也不能赋值
自己好好调吧