вернуть шаблон и нет соответствующей функции для вызова - PullRequest
2 голосов
/ 24 февраля 2012

я использую Armadillo lib для линейной алгебры и я новичок в c ++.

необходимо сериализовать некоторую матрицу в std :: String (для сохранения ее в некотором xml)и есть какой-то готовый метод, который принимает поток .

из-за того, что я не привык читать код на С ++, полный операций с потоковыми строками (я программист на Python), я решилсоздать несколько методов, которые работают со строкой, и спрятать содержимое потока для улучшения читабельности моего кода.

для улучшения моих знаний c ++, я решил попробовать использовать шаблон для создания одного метода для всех классов броненосца: mat, rowvec, colvec (все они имеют .load () и .save ())

Я решил написать эти методы в отдельном файле utils.h, он также будет полезен в будущем проекте!

проблема со вторым методом:

using namespace std;

// 1°
template<typename Matrix>
string matrix_to_string(Matrix& m) {
    stringstream ss;
    m.save(ss, arma::arma_ascii);
    return ss.str();
}

// 2°
template<typename Matrix>
Matrix matrix_from_string(string& s) {
    stringstream ss;
    ss << s;
    Matrix m;
    m.load(ss, arma::arma_ascii);
    return m;
}

первый метод работает отлично, но со вторым .. если я пытаюсь использовать его, я получаю ошибку:

no matching function for call to ‘matrix_from_string(std::string&)’

Я называю это так:

mat prior;
string s = XML.getValue("prior", ""); // my XML lib, it works fine
prior = matrix_from_string( s );

что происходит?

1 Ответ

3 голосов
/ 24 февраля 2012

Изменить строку

prior = matrix_from_string( s );

до

prior = matrix_from_string<mat>(s);
...