我刚开始使用c ++模板,其中我创建了一个模板平方函数,一个模板MyVector类,并覆盖了MyVector类的乘法运算符。
我在对MyVector对象进行平方处理时遇到了问题,即square(bv)出现分段错误11的故障。 欢迎任何帮助或指点。
我在Mac OS上,使用g ++进行编译
使用以下命令配置--prefix = / Library / Developer / CommandLineTools / usr --with-gxx-include-dir = / usr / include / c ++ / 4.2.1 Apple 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;
}
答案 0 :(得分:2)
函数模板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++)
^^^^