作为练习在C ++中学习更多关于动态内存分配的练习,我正在研究自己的vector
类。我在重载sum运算符时遇到了一些困难,所以我想我会转到这里来了解为什么这不起作用。这是我到目前为止所做的:
template<typename T>
class vector
{
private:
T* pointer_;
unsigned long size_;
public:
// Constructors and destructors.
vector();
template<typename A> vector(const A&);
template<typename A> vector(const A&, const T&);
vector(const vector<T>&);
~vector();
// Methods.
unsigned long size();
T* begin();
T* end();
vector<T>& push_back(const T&);
// Operators.
T operator[](unsigned long);
vector<T>& operator=(const vector<T>&);
friend vector<T>& operator+(const vector<T>&, const vector<T>&);
};
template<typename A> vector(const A&)
构造函数如下所示:
template<typename T> template<typename A>
vector<T>::vector(const A& size)
{
this->pointer_ = new T[size];
this->size_ = size;
}
最后,operator+
运算符如下所示:
template<typename T>
vector<T>& operator+(const vector<T>& lhs, const vector<T>& rhs)
{
vector<T> result(lhs.size_);
for (unsigned long i = 0; i != result.size_; i++)
{
result.pointer_[i] = lhs.pointer_[i] + rhs.pointer_[i];
}
return result;
}
当我尝试编译此代码时,我的编译器(VS2013)会返回unresolved external symbol
错误,(据我理解)这意味着there's a function declared somewhere that I haven't actually defined.我不确定问题出在哪里,但是: template<typename A> vector(const A&)
构造函数工作正常。我错过了什么?
答案 0 :(得分:1)
您没有正确地为模板操作员功能提供信息。有多种方法可以做到这一点,每种方法都有优势。一个是朋友世界的意识形态,模板的所有扩展都是彼此的朋友。我宁愿比那更具限制性。
上面你的矢量类,执行以下操作:
template<typename T>
class vector;
template<typename T>
vector<T> operator+(const vector<T>& lhs, const vector<T>& rhs);
像以前一样继续,但请注意朋友声明中的语法:
// vector class goes here....
template<typename T> class vector
{
.... stuff ....
friend vector<T> operator+<>(const vector<T>&, const vector<T>&);
};
然后定义其余部分。这应该会让你得到我认为你想要实现的目标。
祝你好运。
PS:在上面的代码中修复了无效的引用返回值。