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

这个哪儿错了?解决办法

2012-03-01 
这个哪儿错了???两个array实现+,*和scalar(放大)操作编译不通过C/C++ code#includecassert#includeiost

这个哪儿错了???
两个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];
同样的道理这里应该也不能赋值
自己好好调吧

热点排行