2012-03-25 2 views
0
template<class U, class W> 
std::ostream& operator<<(std::ostream & out, const Alias<U, W> & A) 
{ 
    out<<A.ItoS.size()<<std::endl; 
    for (std::map<W, U>::const_iterator it = A.ItoS.begin(); it != A.ItoS.end(); it++) 
     out<<it -> first<<" "<<it -> second<<std::endl; 
    return out; 
} 

ошибки на линии:
for (std::map<W, U>::const_iterator it = A.ItoS.begin(); it != A.ItoS.end(); it++)Ошибка компиляции при использовании шаблонов

ошибка: ожидается, ';' перед тем «это»

ошибка: "это не был объявлен в этой области

Другие функции класса dont't имеют каких-либо проблем при компиляции.

Пока я использовал std :: string вместо U и int вместо W, все было в порядке. Я использую Codeblocks 10 с компилятором MinGW.

ответ

2

Вы забыли typename здесь:

typename std::map<W, U>::const_iterator it = A.ItoS.begin(); 
//^^^^^^^ 

const_iterator является зависимым именем, поэтому здесь требуется typename. Для детального объяснения, прочитайте эту тему:

В C++ 11, вы могли бы просто написать:

auto it = A.ItoS.begin(); 

который является облегчение для программистов C++!

+0

Спасибо, я довольно новичок в C++, так зачем мне помещать там typename? – lpp

+1

@lpp: Перейдите по ссылке: [Где и почему мне нужно поставить ключевые слова «template» и «typename»?] (Http://stackoverflow.com/questions/610245/where-and-why-do-do- i-have-to-put-the-template-and-typename-keywords) – Nawaz

+0

Теперь у меня есть дополнительная проблема с использованием этого класса. В моей простой программе, состоящей из заголовка, класса и основной программы, когда я пытаюсь использовать эти члены класса или функции, я получаю ошибку: undefined ссылка на 'Alias ​​ :: Exist (std :: string const &) const «До этого изменения от шаблона к шаблону все работало правильно. Есть ли что-то, что я мог пропустить? Я определил класс как Alias ​​ Al – lpp

Смежные вопросы