【发布时间】:2017-08-30 21:19:21
【问题描述】:
所以我正在尝试创建一个 vec 类,我可以稍后对其进行 vec 数学运算。
在我开始对其实施实际程序之前工作得很好。
类vecn:
#include <vector>
template <typename T>
class vecn
{
public:
vecn() { }
template <typename... Args>
vecn(Args&&... args)
{
addtovector(args...);
}
friend std::ostream& operator<<(std::ostream& os, const vecn<T>& obj)
{
os << "{";
for (auto it = obj.contents.begin(); it < obj.contents.end(); it++) {
os << *it;
if (it != obj.contents.end() -1)
{
os << ",";
}
}
os << "}";
return os;
}
template<typename T>
vecn<T>& operator=(const vecn<T>& v) {
contents = v.contents;
return *this;
}
unsigned int size() const
{
return contents.size();
}
vecn<T> operator+(const vecn<T>& v1) {
vecn<T> v2();
for (unsigned int i = 0; i < size();i++)
{
v2[i] = v1[i] + this->contents[i];
}
return v2;
}
T& operator[](size_t Index)
{
if (Index > contents.size() -1)
{
contents.resize(Index + 1);
}
return contents.at(Index);
}
const T& operator[](size_t Index) const
{
return contents.at(Index);
}
private:
template <typename... Args>
void addtovector(T& first, Args&&... args)
{
addtovector(first);
addtovector(args...);
}
void addtovector(T& item)
{
contents.push_back(item);
}
std::vector<T> contents;
};
现在我在使用下标运算符访问下级向量时遇到问题,无论我如何设计它,它都无法正常工作。通常会导致
Error C2109 subscript requires array or pointer type
通过谷歌搜索错误,我应该返回一个指向带有下标的数组的指针。我做的。
我有什么遗漏吗?
主要:
vecn<int> v(1,2);
vecn<int> b(3, 4, 5);
std::cout << v + b;
预期输出:
{4,6,5}
【问题讨论】:
-
一开始你不应该在
operator=中使用template<typename T>关键字
标签: c++ vector operator-overloading