У меня есть контейнер, класс, и я хотел бы предоставить ему метод присвоения, аналогичный 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: в функции void
промежуточный слой :: WorkflowSerializationTest ()»:
workflow_test.hpp: 114: ошибка: недопустимая
отлито из типа
«__Gnu_cxx :: __ normal_iterator
для ввода middleware :: TaskDescriptor *
workflow_test.hpp: 114: ошибка: недопустимая
отлито из типа
«__Gnu_cxx :: __ normal_iterator
Введите 'middleware :: TaskDescriptor * ’
workflow_test - это файл, в котором я вызываю функцию assign, myclass rereents класс Workflow в workflow.hpp и workflow.cpp ... TaskDescriptor - это элемент в векторе (тип в коллекции в myclass).
Знаете ли вы, почему это происходит?
Я подозреваю, что в моем классе должен быть какой-то оператор для перегрузки, чтобы этот механизм работал правильно .... потому что проблема не в реализации метода, даже если я пишу
template < typename InputIterator >
void myclass::assign(InputIterator first, InputIterator last) {
// NOTHING WRITTEN IN THE BODY
}
При вызове вызывает то же самое "исключение".