krendel
|
|
|
|
|
Рег.: 20.10.2003
|
Сообщений: 14379
|
|
Рейтинг: 10274
|
|
warning: implicit typename is deprecated
27.02.2005 13:51
|
|
|
Баг или фича?
Надо ли (и КАК?) избавляться от таких варнингов?
Если не надо - можно ли в gcc отключить только такие варнинги?
|
|
Druxa
|
Дрюха
|
|
|
|
Рег.: 27.06.2003
|
Сообщений: 2722
|
Из: Троицк
|
Рейтинг: 1974
|
|
Re: warning: implicit typename is deprecated
[re: krendel]
27.02.2005 13:57
|
|
|
Quote:
(и КАК?)
Писать слово "typename" в нужном месте?
|
нет, я не богат... я сказочно не богат... но я и не умен... |
|
krendel
|
|
|
|
|
Рег.: 20.10.2003
|
Сообщений: 14379
|
|
Рейтинг: 10274
|
|
Re: warning: implicit typename is deprecated
[re: Druxa]
27.02.2005 14:06
|
|
|
на самом деле полностью ошибка такая:
В ответ на:
ierarhy/seq_tree.h:123: warning: `AttGraphAdvanced<VKey, long int, typename Alphabet::symbol>::Edges' is implicitly a typename ierarhy/seq_tree.h:123: warning: implicit typename is deprecated, please see the documentation for details
а код такой:
SCM::Edges edges=(*scheme).getChildren(*i);
вроде фича в том, что ентому компилятору не нравится, что SCM::Edges typename. но убирать typenam-ы не охота - дофига их.
|
|
Druxa
|
Дрюха
|
|
|
|
Рег.: 27.06.2003
|
Сообщений: 2722
|
Из: Троицк
|
Рейтинг: 1974
|
|
Re: warning: implicit typename is deprecated
[re: krendel]
27.02.2005 15:01
|
|
|
Quote:
SCM::Edges edges=(*scheme).getChildren(*i);
Надо писать
code:
typename SCM::Edges;
SCM::Edges edges=(*scheme).getChildren(*i);
Может и в одну строчку можно, не знаю.
Quote:
что ентому компилятору не нравится, что SCM::Edges typename.
Это я вообще не понял, что ты сказал Чего там кому не нравится
|
нет, я не богат... я сказочно не богат... но я и не умен... |
|
krendel
|
|
|
|
|
Рег.: 20.10.2003
|
Сообщений: 14379
|
|
Рейтинг: 10274
|
|
Re: warning: implicit typename is deprecated
[re: krendel]
27.02.2005 17:35
|
|
|
Все! вспомнил нормальный пример:
код такой (класс наследуется от AttGraphAdvanced<VKey, VVal, EdgeVal>, в котором объявлен тип Edges):
В ответ на:
const Edges& getEdgesRev() const { return E_rev_; }
ошибка:
В ответ на:
ierarhy/automat_new.h|13| warning: `AttGraphAdvanced<VKey, VVal, || EdgeVal>::Edges' is implicitly a typename ierarhy/automat_new.h|13| warning: implicit typename is deprecated, please see || the documentation for details
Проблема:
Не знаю, как грамотно переписать, что бы варнинга не было. если тупо дописывать typename, то естественно вылазит
parse error before ;
|
|
DarkGray
|
Carpal Tunnel
|
|
|
|
Рег.: 30.09.2002
|
Сообщений: 31411
|
|
Рейтинг: 8952
|
|
Re: warning: implicit typename is deprecated
[re: krendel]
27.02.2005 17:39
|
|
|
перед Edges пробовал typename писать? именно перед словом Edges?
|
|
feather
|
enthusiast
|
|
|
|
Рег.: 19.04.2003
|
Сообщений: 208
|
|
Рейтинг: 61
|
|
Re: warning: implicit typename is deprecated
[re: krendel]
27.02.2005 21:57
|
|
|
В gcc начиная с 3.4 улучшили соответстивие стандарту С++. Соответственно, в 3.3.х много всего deprecated. Авторы gcc советуют ботать список изменений в сериях 3.4.х.
|
|
krendel
|
|
|
|
|
Рег.: 20.10.2003
|
Сообщений: 14379
|
|
Рейтинг: 10274
|
|
Re: warning: implicit typename is deprecated
[re: DarkGray]
28.02.2005 20:41
|
|
|
|
krendel
|
|
|
|
|
Рег.: 20.10.2003
|
Сообщений: 14379
|
|
Рейтинг: 10274
|
|
Re: warning: implicit typename is deprecated
[re: feather]
28.02.2005 20:42
|
|
|
я в курсе, что это изменение в 3.4.х
только какой смысл ботать этот список - там написано, как бороться с описанной проблемой?
|
|
feather
|
enthusiast
|
|
|
|
Рег.: 19.04.2003
|
Сообщений: 208
|
|
Рейтинг: 61
|
|
Re: warning: implicit typename is deprecated
[re: krendel]
28.02.2005 22:36
|
|
|
Сразу по ссылке, разве не оно? Да и Druxa это же советовал.
code:
struct K {
typedef int mytype_t;
};
template <class T1> struct A {
template <class T2> struct B {
void callme(void);
};
template <int N> void bar(void)
{
// Use 'typename' to tell the parser that T1::mytype_t names
// a type. This is needed because the name is dependent (in
// this case, on template parameter T1).
typename T1::mytype_t x;
x = 0;
}
};
|
|