Longobard
написал 28 декабря 2003 года в 20:01 (1381 просмотр)
Ведет себя
как мужчина; открыл 291 тему в форуме, оставил 2499 комментариев на сайте.
У меня проблема:
class Bolvan {
private:
char* device;
/*и т.д.*/
protected:
int sg_fd;
public:
struct FDError {
const char* message;
FDError (const char* p) { message = p; }
};
Bolvan (char* io_device);
~Bolvan ();
/*****И т.д.*****/
};
Bolvan::Bolvan (char* io_device) {
sg_fd = open (io_device, O_RDONLY);
if (sg_fd < 0) {
char *msg;
sprintf (msg, "Unable to open device %s\n", io_device);
#ifdef DEBUG
sprintf (msg, "open (io_device, O_RDONLY) failed. \n Maybe device name is not valid.\n Check open() call in bolvan.cpp\n");
#endif
throw FDError ((const char*)msg);
}
/***** И т.д. и т.п. */
}
Я в main задаю девайс и перехватываю исключение:
int main (int argc, char* argv[])
{
try {
Bolvan CB ("/dev/hdc");
}
catch (Bolvan::FDError e) {
std::cerr << "File Descriptor error: " << e.message;
return 1;
}
/******и т.д.***/
}
Так вот, при комиляции мне g++ пишет, что ФУНКЦИЯ CB НЕ ОПРЕДЕЛЕНА! Я пробовал Bolvan CB = Bolvan («/dev/hdc»);. Тот же результат Если исключение не перехватывать (убрать try & catch), то все работает. У Бьерна написано, что можно перехватывать исключения из конструкторов. Однако g++ на это ругается.
P.S.: Все нужные хидеры включены.
P.P.S.:Заранее спасибо. Надеюсь на Ваш квалифицированный ответ
P.P.P.S: g++ --version: 3.2
Последние комментарии
-
OlegL, 17 декабря 2023 года в 15:00 →
Перекличка
21
-
REDkiy, 8 июня 2023 года в 9:09 →
Как «замокать» файл для юниттеста в Python?
2
-
fhunter, 29 ноября 2022 года в 2:09 →
Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt?
6
-
Иванн, 9 апреля 2022 года в 8:31 →
Ассоциация РАСПО провела первое учредительное собрание
1
-
Kiri11.ADV1, 7 марта 2021 года в 12:01 →
Логи catalina.out в TomCat 9 в формате JSON
1
DevOps as a Service from Palark
24/7 SRE & DevOps service to cover all your Kubernetes needs.

Очень интересно!! Я еще поковыряюсь с этим, пока могу только сказать, попробуй
try {
Bolvan* CB = new Bolvan(«/dev/hdc»);
}
catch (Bolvan::FDError e) {
и далее по тексту. Будет работать. Почему, пока не знаю, но попробую разобраться. Кстати, на CB ругается компилярор или ЛИНКЕР? У меня ругается линкер.
Интересная задачка! :-)
I’ll be back,
Good Luck for now,
UT
Нашел!! Вот она твоя ошибка:
~Bolvan ();
Либо определи деструктор где-нибудь, либо напиши
~Bolvan (){};
И все будет путем!
Good Luck,
UT
Да не в этом ошибка. У меня есть целый СПП_шник, где описаны все функции класса Bolvan (их 28 штук), среди них и деструктор. Просто я привел здесь только куски.
Далее. Ругается у меня не линкер, а компилер.
Кроме того. Я еще раз ВНИМАТЕЛЬНО перечитал Бьерна, вроде я все делаю правильно. Блин, в чем же дело?
Попробовал сделать так, как ты сказал (через динамическое создание через new). Та же маза.
Получилось. Но возникла енще трабла:
http://www.nixp.ru/cgi-bin/forum/YaBB.pl?board=coding;action=display;num=1072725365;start=0#0