Стандартная библиотека шаблонов с использованием g ++ - PullRequest
0 голосов
/ 04 июня 2009

При переносе программы из windows в linux я столкнулся с проблемой при использовании стандартной библиотеки шаблонов c ++. Я пытаюсь определить шаблон и получаю сообщение об ошибке «ожидаемый инициализатор перед» <в этой строке </p>

typedef std :: list > PairList;

Любые идеи, почему это будет работать с использованием mvc ++ и без использования g ++ и как я могу это исправить?

Ответы [ 4 ]

2 голосов
/ 04 июня 2009

Я думаю, что это касается # включает.

Следующий действительно минимальный кусок кода прекрасно компилируется здесь с g ++ в Linux

#include <utility>
#include <list>

typedef std::list< std::pair< int,double> > PairList;

PairList x;
1 голос
/ 04 июня 2009

Одна вещь, которую следует помнить о стандартных включаемых файлах, это то, что они разрешены, но не обязаны вызывать друг друга. (Это не значит, что они потенциально загрязняют пространство имен этим, поскольку все они используют пространство имен std, с которым вы не должны связываться.)

Возможно, что в MSVC ++ он включает или наоборот, но в заголовках g ++ это не так. Поэтому программа может компилироваться в MSVC ++, а не в g ++, при этом в исходном коде отсутствует обязательный заголовок.

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

0 голосов
/ 04 июня 2009

У меня не было проблем с кодом в G ++, и в целом его поддержка STL была превосходной. У вас есть все директивы #include? Иногда они отличаются от платформы к платформе (даже если они не должны).

0 голосов
/ 04 июня 2009

Вы #include <utility> для pair?

...