gpt4 book ai didi

c++ - 在自定义 vector 类中重载求和运算符

转载 作者:太空宇宙 更新时间:2023-11-04 11:29:30 24 4
gpt4 key购买 nike

作为学习更多关于 C++ 动态内存分配的练习,我正在自己做 vector类(class)。我在重载求和运算符时遇到了一点困难,所以我想我会转到这里来深入了解为什么这不起作用。这是我到目前为止所拥有的:

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&)构造函数工作正常。我错过了什么?

最佳答案

您没有正确地为模板运算符函数加好友。有多种方法可以做到这一点,每种方法都有其优点。一种是世界友好意识形态,其中模板的所有扩展都是彼此的 friend 。我更喜欢比这更严格一些。

你的 vector 类上,做这个:

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:上面代码中修复了无效的引用返回值。

关于c++ - 在自定义 vector 类中重载求和运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com