【发布时间】:2014-07-22 13:12:19
【问题描述】:
检查this 的答案后,我似乎仍然无法解决我的问题:
我目前有一个test_iterator 结构,它将不同类型的迭代器标签包装到它上面,允许我使用所有类型的迭代器测试函数。当为这个迭代器创建一个复制构造函数时,我的问题就出现了。当前结构定义为
template <typename BaseIterator, typename IteratorTag>
struct test_iterator
: boost::iterator_adaptor<
test_iterator<BaseIterator, IteratorTag>,
BaseIterator, boost::use_default, IteratorTag>
{
private:
typedef boost::iterator_adaptor<
test_iterator<BaseIterator, IteratorTag>,
BaseIterator, boost::use_default, IteratorTag>
base_type;
public:
test_iterator() : base_type() {}
test_iterator(BaseIterator base) : base_type(base) {};
test_iterator(const test_iterator& cpy):
base_type(cpy.base_type) {};
};
最后一个构造函数(复制构造函数)给我带来了麻烦,我似乎无法理解我做错了什么。我收到的确切错误是
error C2274: 'function-style cast' : illegal as right side of '.' operator
这是这一行:
base_type(cpy.base_type) {};
【问题讨论】:
-
您是在测试函数中的代码还是迭代器?
-
您没有接受函数对象的构造函数。你确定你说的不是 base_type(cpy.base_type()) 吗?
-
让编译器隐式定义复制构造函数(以及移动构造函数、析构函数和复制/移动赋值)。
标签: c++ c++11 copy-constructor