Как правильно использовать шаблоны? У меня проблема с типом данных в шаблоне <> - PullRequest
1 голос
/ 04 ноября 2011

РЕДАКТИРОВАТЬ 03.11.2011 9:37 вечера :

Это моя ошибка:

 error: no matching function for call to "charList_join(const char [1], CISP430_A5::linked_list<char>&)"

и это мой прототип:

template <typename Item>
string charList_join(const char* glue, linked_list<char> pieces);

и это мой вызов функции:

charList_join("", usedChars)

где usedChars - это static linked_list<char>, объявленный в той же области, где вызывается charList_join().

РЕДАКТИРОВАТЬ 11/ 4/2011 8:45 am: Хорошо, вот мой код с удаленными ненужными функциями:

[ sehe: отредактировано от pastebin до github ]

  • найдите его онлайн на github
  • скачайте его с помощью git:

     git clone git://gist.github.com/1340832.git
    

Я получаю сообщение об ошибке в строке 57, столбец 68 файла premute_append.cpp.Я включил make-файл, чтобы вы могли попытаться собрать его, если хотите.На данный момент я получаю только одну ошибку, но я просто понятия не имею, что это значит.

Если вы попытаетесь скомпилировать ошибку, она будет выглядеть так:

[cisw320b_stu022@scc-bdiv-cis assn5]$ make
g++ -c main.cpp
g++ -c permute_append.cpp
permute_append.cpp: In member function âCISP430_A5::linked_list<std::basic_string<char> > CISP430_A5::permute_append::permute(CISP430_A5::linked_list<char>)â:
permute_append.cpp:57:68: error: no matching function for call to âcharList_join(const char [1], CISP430_A5::linked_list<char>&)â
make: *** [permute_append.o] Error 1

Есть идеи, почему я получаю эту ошибку?

Ответы [ 2 ]

2 голосов
/ 04 ноября 2011

Вы сказали:

и это мой прототип:

string charList_join(const char* glue, linked_list<char> pieces);

Но это не так. В соответствии с кодом, который вы указали , ваша декларация:

template <typename Item>
string charList_join(const char* glue, linked_list<char> pieces);

Что означает, что вам нужно называть это так:

charList_join<char>("", usedChars)

Однако вы фактически не используете Item внутри этой функции, поэтому вам следует просто удалить спецификатор template (из объявления и определения) и вызвать его, как вы это делали. А еще лучше, передайте список по const-reference :

string charList_join(const char* glue, const linked_list<char>& pieces);

Звонок остается:

charList_join("", usedChars)
1 голос
/ 05 ноября 2011
string charList_join(const char* glue, linked_list<char> pieces);

на самом деле

template< typename Item >
string charList_join(const char* glue, linked_list<char> pieces);

Поскольку Item не обнаружено ни по одному из аргументов, вы должны передать его явно:

charList_join<SomeItemType>( "", usedChars);

Или, возможно, вы просто хотеливместо:

template< typename Item >
string charList_join(const char* glue, linked_list<Item> pieces);
...