туплю. С++ наследоване. gcc 4
Что я не так делаю?
Все правильно:
туплю уже час где-то
Можешь продолжать.
Какой компилятор-то?
для тех, кто со мной на танке:
gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)
для всех остальных уже написал в теме сообщения.
компилить командой gcc или g++ не одно и то же
компилирую g++.
более того, раньше таких проблем (с gcc 3.4 например) не было.
а может дело в том, что этот тип через typename объявляется?
class MyFuckingClass{
public:
int nPublicProperty;
}
;// <----------
не ну это же читерство...
а почему не работает так как есть?
Потому что после объявления классов стандарт разрешает объявлять переменные.
почему класс не видит обхявленныю переменную класаа-предка?
так ; после закрывающейся скобки есть или нету?
иначе бы и в gcc 3.4 не компилировалось бы
cat some.cpp
g++ some.cpp
в студию
ЗЫ нафик printf:?
Поправить все удалось, вставыи объявление полей в класс-потомок.
Файлы большие - по ~1.5 Кстрок так что
cat думаю здесь не рулит.
Сегодня мне лень писать мелкую программку, а завтра все сделаю.
Файлы большие - по ~1.5 Кстрок
Сто пятьдесят тысяч строк этого?
class A
{
public:
int fff;
}
class B : public A
{
void ttt
{
printf("%d\n",fff);
}
}
Предыдущий был ещё круче.
тогда то я реально затупил вроде и ошибка была действительно в невнимательности. собственно Kai первым постом ее и разрулил.
// ковыряться в носу никому не запрещаю.
а если все тупо сделать cat-om то вы все тут заманакаетесь нужные куски в коде искать
сказать что-то умное поделу у тебя не получается.
как-то красиво подколоть меня - тоже.
зачем же тогда писать эти нелепости на публике?
просто неохота было вырезать куски из файлов, класть в один и компилить.а постить компилирующуюся прогу и фпаривать, что она не компилируется, охота было?
для тех, кому интересно разобраться с проблемой я пообещал выложить сегодня маленький по размеру пример. Это два.
никому ничего не впаривал и довольно точно объяснил какое отношение кусок приведенного кода имеет к исходной программе (он описывает структуру наследования и обращения в полям класса, но типы совершенно другие). соответственно кусок этот, очевидно (если поставить ; и т.п. компилируется и понятно это невооруженным глазом.
Это три.
еще пол часа и выложу текст.
Сорри, что может быть заставил кого-то ждать, вот выдрал кусок и пощу его здесь:
[ laz]$ cat main.cpp:
#include <stdlib.h>
#include <map>
template< class VKey, class VVal, class EdgeVal> class AttGraph {
public:
typedef std::map<VKey, VVal> Vertices;
std::map<VKey, VVal> V;
class EdgeInfo {
public:
VKey to; EdgeVal label;
EdgeInfo(const VKey& v, const EdgeVal l):to(v label(l) {}
EdgeInfo {}
EdgeInfo& operator= (const EdgeInfo& ei)
{ to=ei.to; label=ei.label; }
};
typedef std::multimap<VKey, EdgeInfo> Edges;
std::multimap<VKey, EdgeInfo> E;
std::multimap<VKey, EdgeInfo> E_rev_;
};
template <class VKey,class VVal, class EdgeVal> class AttGraphAdvanced:public AttGraph<VKey,VVal,EdgeVal> {
public:
typedef EdgeVal EVal;
typedef typename AttGraph<VKey,VVal,EdgeVal>::Edges Edges;
const Edges&
getEdgesRev const
{
return E_rev_;
}
};
int main
{
AttGraphAdvanced<long,long,long> A;
A.getEdgesRev;
}
[ laz]$ g++ main.cpp
main.cpp: In member function ‘const typename AttGraph<VKey, VVal, EdgeVal>::Edges& AttGraphAdvanced<VKey, VVal, EdgeVal>::getEdgesRev const’:для интересующихся версией компилятора:
main.cpp error: ‘E_rev_’ was not declared in this scope
[ laz]$ g++ -v
Using built-in specs.
Target: i386-redhat-linux
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,java,f95,ada --enable-java-awt=gtk --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --host=i386-redhat-linux
Thread model: posix
gcc version 4.0.0 20050519 (Red Hat 4.0.0-8)
this->E_rev_;
пашет.
а это баг или фича?
http://gcc.gnu.org/gcc-3.4/changes.html
искать "this->"
искать "this->"
спасибо.
Блйа, а как же MAN?
5 баллов!
Оставить комментарий
SCIF32
Чего-то туплю уже час где-то:Были два класса, одн другой наследовал, все выставлено public:
class A
{
public:
int fff;
}
class B : public A
{
void ttt
{
printf("%d\n",fff);
}
}
Так вот, у меня компилятор стал ругаться на то, что fff не объявлено.
Что я не так делаю?