【发布时间】:2013-05-14 08:04:22
【问题描述】:
我有一个类,我重载了 [ 运算符以在 main 中使用。但这里的问题是;在另一个函数的类中的某个地方。我想像旧样式一样使用 [ 运算符。我如何同时使用它们或如何修改我重载的 [ 参数?
这里是重载部分。
T &operator[](int i)
{
if (i < 0 || i >= ArithmeticVector<T>::size())
throw std::string("Out of bounds!"); //throw std::out_of_range;
else
return data[i];
};
这是我想使用的另一个功能;
friend ArithmeticVector<T> operator /(const ArithmeticVector<T>& v1, const ArithmeticVector<T>& v2 )
{
/*Do quick size check on vectors before proceeding*/
ArithmeticVector<T> result(v1.size());
for (unsigned int i = 0; i < result.size(); ++i)
{
result[i]=v1[i]/v2[i];
}
return result;
};
我收到类似错误 C2678: binary '[' : no operator found 之类的错误,它采用“const ArithmeticVector”类型的左操作数
问题出在这一行。
result[i]=v1[i]/v2[i];
重载的运算符不喜欢它:/
【问题讨论】:
-
当你说“问题出在这一行”时,当你在 main 中划分两个向量时会出现错误?
-
@tomislav-maric 是的。当我从
friend ArithmeticVector<T> operator /(const ArithmeticVector<T>& v1, const ArithmeticVector<T>& v2 )获取const时,它编译但仍然崩溃。 -
当它崩溃时会出现什么错误,SIGFPE?
-
@tomislav-maric 未处理的异常错误。我被困在一个常量或非常量元素循环中。如果我删除 const 程序崩溃,如果这次为其他重载添加 const 它不接受。没救了……
-
您是否尝试在没有优化的情况下并在完全调试模式下编译您的代码?然后,您可以逐步执行程序并查看究竟发生了什么。如果您发布此内容,将更容易找到问题的解决方案,或者您可能会自己找到它..
标签: c++ operator-overloading friend