powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Open(const char*serverName) throw ConnectDbException;
10 сообщений из 10, страница 1 из 1
Open(const char*serverName) throw ConnectDbException;
    #33774816
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как напсано здесь

авторЧтобы облегчить обработку ошибок и сделать запись о них более наглядной, описания методов и функций можно дополнить информацией, какого типа исключительные ситуации они могут создавать

Попробовал:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class Socketse {
	public:
		enum errCode {
			STARTUP_WSA,
....
			READ_ERR
		};
		Socketse(errCode _err) {err=_err;};
		errCode getErr(void )const {return err;};
	private:
		errCode err;
};

...

class Sockets {
	private:
...
		//Инициализирует WSA, если это необходимо
		void init_WSA()	throw Socketse;

Соответвенно следующие вопросы:
1. Почему он мне выдает ошибку:
компилер
sock_class.h(43) : error C2061: syntax error : identifier 'Socketse'
sock_class.h(43) : error C2238: unexpected token(s) preceding ';'
sock_class.cpp(50) : error C2039: 'init_WSA' : is not a member of 'Sockets'
sock_class.h(34) : see declaration of 'Sockets'

2. Эта директива компилятору тоже что-то говорит или создана только для пользователя?
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33774991
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Показывай весь код, а то не совсем понятно на что именно ругается компилятор.
2. Про Init_WSA(), похоже, ему вообще ничего неизвестно... где эта функция у тебя описана?
3. Вот тут:
Код: plaintext
void init_WSA()	throw Socketse;
если честно, не понятно, что ты хотел сделать.
К чему тут void? Давай контекст...
throw - отдельная функция... либо точку с запятой перед ней поставь либо init_WSA() в if какой-нибудь включи лбо ещё чего...
4. Про какую директиву компилятору идёт речь?
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775099
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K.1. Показывай весь код, а то не совсем понятно на что именно ругается компилятор.
2. Про Init_WSA(), похоже, ему вообще ничего неизвестно... где эта функция у тебя описана?
3. Вот тут:
Код: plaintext
void init_WSA()	throw Socketse;
если честно, не понятно, что ты хотел сделать.
К чему тут void? Давай контекст...
throw - отдельная функция... либо точку с запятой перед ней поставь либо init_WSA() в if какой-нибудь включи лбо ещё чего...
4. Про какую директиву компилятору идёт речь?

1. Какие части кода еще интересуют (13 файлов)?
2. Если коментарю throw Socketse, все нормально компилится и функцию он находит. Эта функция описана в классе Sockets. Определена, соответственно, в cpp
3. Хотел сделать так же как указано в методичке. Сама функция:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
void Sockets::init_WSA() {
	if (initWSA==NULL) {
		try {
			initWSA = new InitWSA();
		} catch (InitWSAe &) {
			throw Socketse(Socketse::STARTUP_WSA);
		}
	}
}
Понимаю, что throw это функция. Включить в if не могу, так как она находится в описании функции init_WSA() в описании класса.
4. Директиву... ну это так я ее назвал имелось в виду само "throw Socketse":
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775438
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мда... так, конечно, сложно судить, но 13 файлов не запостишь ))
Покажи хотя бы те строки, на которые ругается компилятор... и контекст к ним, если его не много. Что там в 43-й строке? Может просто синтаксис не в порядке...
И ещё, посмотри вот тут особенно раздел Спецификация исключений там и примеры есть, может поможет...
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775492
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K.Мда... так, конечно, сложно судить, но 13 файлов не запостишь ))
Покажи хотя бы те строки, на которые ругается компилятор... и контекст к ним, если его не много. Что там в 43-й строке? Может просто синтаксис не в порядке...


Файл объявлений:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
#ifndef __SOCK_CLASS_H__
#define __SOCK_CLASS_H__

#include <Winsock2.h>

//Класс исключительных ситуаций для класса сокетов
class Socketse {
	public:
		enum errCode {
			STARTUP_WSA=- 1 ,
			CLEANUP_WSA=- 2 ,
			OPEN_SOCKET=- 3 ,
			BIND_SOCKET=- 4 ,
			CLOSE_SOCKET=- 5 ,
			NULL_STRING=- 6 ,
			FAIL_ADDR=- 7 ,
			GET_HOST_NAME=- 8 ,
			GET_HOST_BY_NAME=- 9 ,
			MY_ADDR_APSEND=- 10 ,
			GET_MY_ADDR=- 11 ,
			SEND_SMALL=- 12 ,
			SEND_ERR=- 13 ,
			READ_ERR=- 14 
		};
		Socketse(errCode _err) {err=_err;};
		errCode getErr(void )const {return err;};
	private:
		errCode err;
};

//Класс сокета
class Sockets {
	private:
		unsigned int sock;	//Дескриптор сокета sip
		struct timeval timeout;//Вспомогательная переменная для определения, сколько ждать пакет
		int sockaddr_in_len;//Вспомогательные данные. Хранят длину структуры sockadd_in

		//Корректирует ip-адрес на сколько это возможно
		char *addr_correct(char *aSrc, char *sDst);
		//Инициализирует WSA, если это необходимо
		void init_WSA()	throw Socketse;
		//Открывает сокет и связывает его с адресом и портом
		void init(char *addr, int port)		/*throw Socketse*/;
		//Подгатавливает структуру sockadd_in
		void make_sockaddr_in(char *addr, int port, struct sockaddr_in *addr_in)/*throw Socketse*/;

	public:
		Sockets(char *my_addr, int my_port)	/*throw Socketse*/;
		Sockets(int my_port)	/*throw Socketse*/;
		~Sockets()	/*throw Socketse*/;

		//Проверяем есть ли пакеты для получения
		int check_pack();
		//Отылаем пакет
		void put(char *to_addr, int to_port, char *buf, int size)	/*throw Socketse*/;
		//Принимаем пакет
		int get(char *buf, size_t size)		/*throw Socketse*/;
		int get(char *buf, size_t size, char *ip, int *port)	/*throw Socketse*/;
};

#endif


соответственно, ошибка (та, которая была на 43-й)
компилер
sock_class.h(41) : error C2061: syntax error : identifier 'Socketse'
sock_class.h(41) : error C2238: unexpected token(s) preceding ';'

на выденной строке
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775534
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. тут особенно раздел Спецификация исключений там и примеры есть, может поможет...

Почитал, спасибо. Вообщем, понял, что надо в скобочки поставить. Поставл и компилятор съел, но попрехнулся:
компилятор
sock_class.h(41) : warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)


Не пойму, к чему он клонит (что-то запарился уже :) )...
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775607
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akh компилятор
sock_class.h(41) : warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)

Не пойму, к чему он клонит (что-то запарился уже :) )...
Ньюансы компайлера (несоответствие стандарту)...
тут вот описание "проблемы" есть
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775675
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitrii K. Akh компилятор
sock_class.h(41) : warning C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)

Не пойму, к чему он клонит (что-то запарился уже :) )...
Ньюансы компайлера (несоответствие стандарту)...
тут вот описание "проблемы" есть

Т.е. , раз у меня функция не __declspec(nothrow), то он мою прозьбу игнорирует?
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775746
Dmitrii K.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhТ.е. , раз у меня функция не __declspec(nothrow), то он мою прозьбу игнорирует?
Ага, он вообще всё игнорирует, кроме nothrow, то есть для VC из 2005 студии (я так понял, ты ей пользуешься) возможны 2 варианта :
1. Функция вообще не генерирует исключений - throw()
2. Функция может генерировать любые исключения - throw(...)

То есть пока что это почти лишь документирование, но возможно это изменится в последующих версиях компайлера что-то изменится и могут возникнуть проблемы... Поэтому он варнингом и ругается.
...
Рейтинг: 0 / 0
Open(const char*serverName) throw ConnectDbException;
    #33775838
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. Ставить throw(...) и вперед. :)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Open(const char*serverName) throw ConnectDbException;
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]