Здравствуйте, Vamp, Вы писали:
A>>у тебя происходит косвенный вызов чисто виртуальной функции V>Почему?
вру , нет поскольку она переопределена в C1
а код в таком виде как он приведен не должен скомпилиться вообще. в ClassBase недефолтный конструктор который
нигде не вызывается
Re[3]: о виртуальных функциях
От:
Аноним
Дата:
16.02.05 12:23
Оценка:
A>>у тебя происходит косвенный вызов чисто виртуальной функции
_>а как это побороть ???
код приведен не полностью и в таком виде не скомпилится
покажи все целиком
A>а код в таком виде как он приведен не должен скомпилиться вообще. в ClassBase недефолтный конструктор который A>нигде не вызывается
Ну почему же. Мы же не знаем сигнатуры конструктора С1. Вероятно, вызывается из него.
_>ClassC1 *cC1=new ClassC1(x,y,"t1.txt");
cC1->>LoadFile(); //EAccessViolation на эту строку
_>
у вас в конструкторе ClassBase делается опосредованный вызов виртуальной функции через StringProc вызывается vStringProc, а она является чисто виртуальной. А, как извесно, при конструировании виртуальности ещё нету.
Т.е. вы не можете вызывать чистовиртуальные функции из конструктора, или функции которые их вызывают.
1>у вас в конструкторе ClassBase делается опосредованный вызов виртуальной функции через StringProc вызывается vStringProc, а она является чисто виртуальной. А, как извесно, при конструировании виртуальности ещё нету. 1>Т.е. вы не можете вызывать чистовиртуальные функции из конструктора, или функции которые их вызывают.
А где у него определение конструктора ClassBase?
Of course, the code must be complete enough to compile and link.
L_L>А где у него определение конструктора ClassBase?
Ага, мне тоже интересно.
Не говоря уже о том, что при таком опосредованном вызове будет не АссессВиолейшн, а pure virtual function call.
Здравствуйте, Lorenzo_LAMAS, Вы писали:
1>>у вас в конструкторе ClassBase делается опосредованный вызов виртуальной функции через StringProc вызывается vStringProc, а она является чисто виртуальной. А, как извесно, при конструировании виртуальности ещё нету. 1>>Т.е. вы не можете вызывать чистовиртуальные функции из конструктора, или функции которые их вызывают.
L_L>А где у него определение конструктора ClassBase?
Здравствуйте, Awaken, Вы писали:
_>> stream=fopen(filename.c_str(),"r"); _>> while (fgets(buf,255,stream))
A>ошибка твоя в том что не проверяешь stream на NULL и Exception вываливается при обращении по нулл пойнтеру внутри fgets
A>и не причем тут виртуальные функции
из MSDNвского примера на fopen NULL вылетает если файл не существует
однако он есть и лежит в той же папке, где и этот cpp
Здравствуйте, new_user, Вы писали:
_>Здравствуйте, Awaken, Вы писали:
_>>> stream=fopen(filename.c_str(),"r"); _>>> while (fgets(buf,255,stream))
A>>ошибка твоя в том что не проверяешь stream на NULL и Exception вываливается при обращении по нулл пойнтеру внутри fgets
A>>и не причем тут виртуальные функции
_>из MSDNвского примера на fopen NULL вылетает если файл не существует _>однако он есть и лежит в той же папке, где и этот cpp
если ты код из под среды VC++6.0 запускаешь то рабочим каталогом считается то где лежит exe, т.е. Debug/Release
1. из с билдера я запускаю код
2. этот код (тот что читает файл) работал когда было несколько класов отдельных,
поскольку они все идентичны то захотел их как-то одинаково сделать
пока не работает
Здравствуйте, new_user, Вы писали:
_>1. из с билдера я запускаю код _>2. этот код (тот что читает файл) работал когда было несколько класов отдельных, _>поскольку они все идентичны то захотел их как-то одинаково сделать _>пока не работает
И чего? В билдере отладчика нет? Посмотри по шагам, что и где вылетает. На крайняк посмотри в дизассемблере.