重载自定义向量类中的和运算符
Overloading Sum Operator in Custom Vector Class
作为学习c++动态内存分配的练习,我正在编写自己的vector
类。我在重载求和运算符时遇到了一点困难,所以我想我应该在这里深入了解一下为什么它不起作用。以下是目前为止的内容:
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
错误,当我试图编译这段代码,这(据我所知)意味着有一个函数声明的地方,我没有实际定义。我不确定问题在哪里,然而:template<typename A> vector(const A&)
构造函数工作得很好。我错过了什么?
您没有正确地将模板操作符函数列为好友。有多种方法可以做到这一点,每种方法都有其优点。一种是世界之友的意识形态,在这种意识形态中,模板的所有扩展都是彼此的朋友。我喜欢更严格一点。
在你的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++映射:具有自定义类的运算符[]不起作用(总是返回0)
- 如何正确实现和访问运算符的各种自定义枚举器
- 自定义先决条件对移动分配运算符有效吗
- C++ - 没有自定义交换功能的移动分配运算符?
- C++ 中完全自定义的流运算符
- 如何在自定义对象的<<运算符中添加自定义前缀
- C++ 通过自定义赋值运算符隐式转换函数参数
- 在 C++ 的自定义运算符中删除与删除[](不同于常见的删除与删除[]问题)
- 自定义运算符重载C++,无开销
- C++自定义删除运算符不能正常工作?
- 如何使用运算符>>在自定义字符串中输入多个单词?
- 如何处理自定义输出运算符中的 iomanips?
- 在priority_queue的自定义类中重载比较运算符
- 重载C++中的[]运算符以支持自定义设置函数
- 运算符的歧义错误<<自定义 std::ostream 子类中的重载
- 如何使用C++将MXNET自定义运算符构建到单独的库/包中?
- 自定义容器中的括号运算符中的恒常性
- 重写自定义数组类的运算符/开始/结束
- boost::asio::async_read_until 具有自定义匹配条件运算符重载混淆
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)