Ошибка C ++: отсутствие подходящей функции для вызова

Я получаю упоминаемую здесь ошибку: C ++ Templates Error: нет соответствующей функции для вызова std :: vector <int, std :: allocator >

Вот ошибка (снова):

main.cpp: In function 'int main()': main.cpp:21:21: error: no matching function for call to 'Test::foo(std::vector<int, std::allocator >)' main.cpp:21:21: note: candidate is: main.cpp:14:6: note: void Test::foo(std::vector&) [with T = int] main.cpp:14:6: note: no known conversion for argument 1 from 'std::vector<int, std::allocator >' to 'std::vector<int, std::allocator >&' 

Проблема в том, что у меня более сложная ситуация, и я не знаю, как ее решить (не нарушая слишком много кода). У меня есть двоичный class дерева поиска, который является общим. Я хочу заполнить вектор элементов типа T (общий) со всеми значениями из узлов двоичного дерева поиска, поэтому я не могу создать вектор const. Функция, которая пересекает дерево, является рекурсивной.

Так что я:

 /*main*/ BST t; t.add(21); t.add(12); //.... etc. vector elements; t.inorder(elements); /* ------------ */ 

а также:

 /*BST.h*/ template class BST{ //.... Node* root; //.... void inorder_rec(Node* root, vector& result); void inorder(vector& result); //.... }; template void BST::inorder_rec(Node* root, vector& result){ // recursive call for the child nodes } void BST::inorder(vector& result){ inorder_rec(this->root, result); } /* ------------ */ 

Вы пытаетесь вызвать функцию, которая ссылается на временную. Временное может привязываться только к ссылке на const. Кроме того, было бы разумно показать, где возникла ошибка.

Это ваш фактический код? Определения inorder и inorder_rec должны иметь возвращаемые типы. В противном случае эта часть кода выглядит нормально, без временной видимости:

 vector elements; t.inorder(elements); 

Тупой вопрос, но сохранили ли вы свой файл? Или эта ошибка возникает из другой части кода?