【发布时间】:2015-08-23 09:27:56
【问题描述】:
我的问题很简单,但我不明白它的原因,即使经过广泛的研究也没有出现类似的帖子,所以这里是:
我有以下运算符重载:
template <class T, size_t size>
inline Vector<T, size> operator + (Vector<T, size> &a, Vector<T, size> &b) {
Vector<T, size> result;
for (auto i = 0; i < size; ++i) {
result[i] = a[i] + b[i];
}
return result;
}
显然只有一个代码路径,而且这个路径也返回一个值,但是在 Visual Studio 2013 下编译,我得到一个错误 C4716,说明编译器实例化的函数“必须返回一个值”。到目前为止,我尝试过的所有实例都出现此错误。对于同一标头中的每个其他运算符重载,我也会收到此错误,所有这些的结构都类似于上面的 sn-p。 我在这里遗漏了一些明显的东西吗?
编辑:这是模板化的向量类定义:
template <class T, size_t size>
struct Vector {
explicit Vector(T value = static_cast<T>(0)) {
for (auto i = 0; i < size; ++i) {
_data[i] = value;
}
}
explicit Vector(const Vector &other) {
for (auto i = 0; i < size; ++i) {
_data[i] = other._data[i];
}
}
explicit Vector(T values[size]) {
for (auto i = 0; i < size; ++i) {
_data[i] = values[i];
}
}
T & operator = (const Vector &other) {
for (auto i = 0; i < size; ++i) {
_data[i] = other._data[i];
}
return *this;
}
T & operator [] (size_t index) {
return _data[index];
}
T _data[size];
};
【问题讨论】:
-
>>> masterMapOfBugs['Visual Studio Compilation Error C4716 but the function does return'] == 'Missing bracket somewhere' -
我已将 Vector 类的定义添加到我的问题中。
-
我想对我的问题投反对票是由于 Vector 的任务定义,如果不是,我很乐意听到如何进一步改进我的问题。
标签: c++ templates c++11 operator-overloading operator-keyword