LINUX.ORG.RU

проблемы с переходом на gcc3.3.1


0

0

стоял у меня RedHat7.3 с gcc2.96. Сейчас я перешел на мандрэйк9.2, на котором стоит gcc3.1.3. Теперь одна из библиотек, которыми я пользуюсь не компилируется. Я изолировал проблему к следуещему:
#include <cmath>
#include <functional>
#include <iostream>
using namespace std;
template <class T = double, class Alloc = alloc>
class matrix{;};
typedef vector<T> container;
typedef typename container::value_type value_type;
Под старым комайлером компилируется на ура, а сейчас дает вот это:
DHAVE_CONFIG_H -I. -I. -I.. -O2 -O0 -g3 -Wall -fno-exceptions -fno-check-new -c main.cpp
main.cpp:22: error: syntax error before `>' token
main.cpp:28: error: syntax error before `;' token
main.cpp:29: error: `container' is not a class or namespace
main.cpp:29: error: `value_type' is not a class or namespace
main.cpp:29: error: `container' fails to be a typedef or built in type
main.cpp:29: error: ISO C++ forbids declaration of `value_type' with no type
main.cpp:29: error: template declaration of `typedef int value_type'
main.cpp:29: confused by earlier errors, bailing out
gmake: *** [main.o] Error 1
*** failed ***

Что делать?

anonymous

template <class T = double, class Alloc = alloc>
class matrix{;};
typedef vector<T> container;

А оно должно компилироавться? Вроде бы vector<T> за пределами объявления шаблона? Ясен пень, что идентификатор T неопределен и компилятор тебе об этом честно говорит...

anonymous
()
Ответ на: комментарий от anonymous

не,это я, балбес, copy-paste разучился делать.
строки
typedef vector<T> container;
typedef typename container::value_type value_type;
находятся в определении класса matrix

anonymous
()
Ответ на: комментарий от anonymous

ну раз балбес, то попробуй еще включить #include<vector> и типа std::vector<T>

вдруг поможет :)

anonymous
()

Версия STL другая в 3.2/3 в отличии от 2.95/96. Лечится указанием намеспейсов ( в частности std:: ) и коррекцией иклюдов. Сам матерился, когда переползал с ЦЕ++ прогами с 2.95 на 3.2 ( Вот мля Бьорн подсуропил то :)

PETER ★★
()
Ответ на: комментарий от PETER

RE:

Версии STL в gcc 3.XY лечение не требуется.
Требуется ипользование таких конструкций, как using namespace XXX и/или using XXX::YYY
И желательно прочтение хотя бы одной из таких книг, как "Язык программирования C++: специальное издание" Бьерна Страуструпа, или Лафоре, или что нибудь, что описывает последние стандарты C++, а не тот уровень, который был во времена Borland C++ 1.0

loki
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.