cygan123 Temat założony przez niniejszego użytkownika |
No matching function, problem z wektorem wektorów » 2015-11-30 14:05:06 Witam. W swoim kodzie próbuję jako argument funkcji wykorzystać wektor wektorów przy pomocy zwykłego wektora oraz wektora3d z biblioteki eigen. Kod funkcji prezentuje się następująco.(środek jeszcze nie zrobiony, gdyż napotkałem problemy szybciej) template <typename T> void print(urg_t *urg, long data[], unsigned short intensity[], int data_n, long time_stamp,std::vector<Eigen::EigenBase<T> > & C,int ColsIteration) {
(void)urg;//wyswietlanie calego pomiaru
printf("# n = %d, time_stamp = %ld\n", data_n, time_stamp); for (int i = 0; i < data_n; ++i) { printf("%d, %ld, %d\n", i, data[i], intensity[i]); C(i,ColsIteration) =static_cast<double>(data[i]); } }
Wywołanie oraz konstruktor wektorów std::vector<Eigen::Vector3d> Measures;
print(&urg, data, intensity, n, time_stamp, Measures,ColsIteration);
Przy kompilacji wyświetlają się następujące błędy: error: no matching function for call to ‘print(urg_t*, long int*&, short unsigned int*&, int&, long int&, std::vector<Eigen::Matrix<double, 3, 1> >&, int&)’
note: candidate is: : note: template<class T> void print(urg_t*, long int*, short unsigned int*, int, long int, std::vector<Eigen::EigenBase<Derived> >&, int)
Nie za bardzo jestem w stanie sobie z tym poradzić, próbowałem już kilku metod m.in. tych podanych w dokumentacji Eigena, ale nie za bardzo zadziałały. Z góry dzięki za pomoc |
|
darko202 |
» 2015-11-30 14:15:08 1. co to jest ? urg_t *urg
nie widać w załączonym kodzie
2. no matching function : to znaczy nie ma funkcji pasującej
void print(urg_t *urg,...
np. nie widzi itp. |
|
cygan123 Temat założony przez niniejszego użytkownika |
» 2015-11-30 14:24:35 Dzięki za szybką odpowiedź. Te rzeczy o których mówisz, one wszystkie znajdują się w kodzie, po prostu nie zamieszczałem całego kodu. Problem pojawił się po umieszczeniu w tej funkcji własnie tego wektora.
|
|
Monika90 |
» 2015-11-30 14:26:56 no matching function : to znaczy nie ma funkcji pasującej |
Nie. To znaczy że nie udało się wydedukować parametru szablonu T. Zastąp std::vector<Eigen::EigenBase<T>> przez std::vector<T> |
|
cygan123 Temat założony przez niniejszego użytkownika |
» 2015-11-30 14:35:35 Również dzięki za odpowiedź.Po zamianie:
void print(urg_t *urg, long data[], unsigned short intensity[], int data_n, long time_stamp,std::vector<T> & C,int ColsIteration)
Kompilator zaczął wyświetlać In function ‘void print(urg_t*, long int*, short unsigned int*, int, long int, std::vector<_Tp>&, int) [with T = Eigen::Matrix<double, 3, 1>]’: instantiated from here main.cpp:38:8: error: no match for call to ‘(std::vector<Eigen::Matrix<double, 3, 1> >) (int&, int&)’
|
|
j23 |
» 2015-11-30 14:37:31 ... |
|
Monika90 |
» 2015-11-30 15:00:23 C to jest std::vector, nie da się na nim wykonać operacji C(i,ColsIteration), być może chodziło ci o C[i][ColsIteration] |
|
cygan123 Temat założony przez niniejszego użytkownika |
» 2015-11-30 16:00:10 Ta część jest wykomentowana, sam nie wiem dlaczego wrzuciłem tutaj wersję bez tego. To jest pozostałość po macierzy. Problem w tym, że wersja z macierza działała, a po zmianie na wektor pojawiają się powyższe błędy. |
|
« 1 » 2 |