我有一个容器,一个类,我想像 STL 那样为它提供一个方法赋值。
class myclass {
public:
//...
template < typename InputIterator >
void assign(InputIterator first, InputIterator last);
// ...
private:
// ...
std::vector<int> mystlcont;
// ...
};
template < typename InputIterator >
myclass::assign(InputIterator first, InputIterator last) {
this->mystlcont.clear();
this->mystlcont.assign(first, last);
}
好的。好吧我编译,ok。 我现在用它...
myclass m;
std::vector<int> vect;
vect.push_back(1);
vect.push_back(1);
vect.push_back(2);
vect.push_back(3);
vect.push_back(5);
vect.push_back(8);
vect.push_back(13);
m.assign(vect.begin(), vect.end()); // Line X
在第 X 行调用函数时,编译器返回一个非常非常丑陋的错误。
workflow_test.hpp: In function ‘void middleware::WorkflowSerializationTest()’: workflow_test.hpp:114: error: invalid cast from type ‘__gnu_cxx::__normal_iterator
’ to type ‘middleware::TaskDescriptor*’ workflow_test.hpp:114: error: invalid cast from type ‘__gnu_cxx::__normal_iterator ’ to type ‘middleware::TaskDescriptor*’
workflow_test 是我调用函数 assign 的文件,myclass 代表 workflow.hpp 和 workflow.cpp 中的 Workflow 类... TaskDescriptor 是 vector 中的元素(myclass 中集合中的类型)。
你知道为什么会这样吗?
我怀疑在我的类中必须有一些运算符重载才能让这个机制正常工作....因为它不是方法实现的问题,即使我写
template < typename InputIterator >
void myclass::assign(InputIterator first, InputIterator last) {
// NOTHING WRITTEN IN THE BODY
}
当被调用时引发完全相同的“异常”。
最佳答案
您拥有的不是您自己的容器,而是容器包装器。
但我只看到您的代码有一个问题:您的 myclass::assign
定义没有指定返回类型。
这段代码实际上对我有用:
#include <vector>
#include <algorithm>
#include <iostream>
class MyWrapper {
public:
template <typename InputIterator>
void assign(InputIterator first, InputIterator last);
const std::vector<int>& container() const { return container_m; }
private:
std::vector<int> container_m;
};
template <typename InputIterator>
void MyWrapper::assign(InputIterator first, InputIterator last)
{
container_m.assign(first, last);
}
template <typename T>
void print(const T& x)
{
std::cout << x << " ";
}
int main()
{
MyWrapper mw;
std::vector<int> vect;
vect.push_back(1);
vect.push_back(2);
vect.push_back(3);
vect.push_back(4);
vect.push_back(5);
vect.push_back(6);
vect.push_back(7);
mw.assign(vect.begin(), vect.end());
std::for_each(mw.container().begin(), mw.container().end(), print<int>);
}
输出:
1 2 3 4 5 6 7
关于C++ 为容器编写分配过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4298403/