我刚开始学习c++模板,在其中我创建了一个模板平方函数,一个模板MyVector类,并覆盖我的MyVector类别的乘法运算符。
我在对MyVector对象进行平方的部分面临一个问题,即平方(bv(,其中它因分割错误11而失败。欢迎任何帮助或建议。
我在Mac操作系统上,用g++编译
配置为:--prefix=/Library/Developer/CommandLineTools/usr--带有gxx include dir=/usr/include/c++/4.2.1Apple LLVM版本9.1.0(clang-902.0.39.2(目标:x86_64-apple-darwin17.7.0线程型号:posix
#include <iostream>
using namespace std;
template <typename T>
T square(T x){
return x*x;
}
//Template has a side effect of code bloat,
//i.e. both the datatypes will have a different code sections
//Template Class
template <typename T>
class MyVector{
T arr[100];
int size;
public:
MyVector():size(0){}
void push(T x){ arr[size]=x; size++;}
T get(int i) const {return arr[i];}
int getSize() const { return size;}
void print() const { for(int i=0;i<size;i++){cout<<arr[i]<<endl;}}
};
//Template Operator multiply for MyVector
template <typename T>
MyVector<T> operator* (const MyVector<T>& rhs1, MyVector<T>& rhs2){
MyVector<T> ret;
for(int i=0; rhs1.getSize();i++){
ret.push(rhs1.get(i)*rhs2.get(i));
}
cout<<"In BV Squared"<<endl;
ret.print();
return ret;
};
int main(){
// cout<<square(5)<<endl;
// cout<<square(5.5)<<endl;
cout<<square<int>(5)<<endl;
cout<<square<double>(5.5)<<endl;
MyVector<int> bv;
bv.push(1);
bv.push(2);
bv.push(8);
bv.push(9);
bv.print();
cout<<"Squared bv:"<<endl;
bv = square(bv);
bv.print();
return 0;
}
函数模板MyVector<T> operator* (const MyVector<T>& rhs1, MyVector<T>& rhs2)
中的循环不变量不正确。更改
for(int i=0; rhs1.getSize();i++)
至
for(int i=0; i < rhs1.getSize();i++)
^^^^