генерация исключения

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Евгений Александрович
Сообщения: 82
Зарегистрирован: 19 дек 2009, 16:48

Здравствуйте. Есть 2 cpp проекта: класс исключений и класс сложения двух строк соответственно.
Проблема: мне нужно было, по условию, добавить класс искл. , который должен генерировать искл. ,если строка инициализации слишком длинная. Но что у меня не так??

main.cpp

Код: Выделить всё

class base
{
private:
	char* str;
	int size;
public:                              
	base(){size = 0; str = 0;}
    base( char *str1) 
	{ 
		size = strlen(str1);
		str = new char[size+1];
		strcpy(str,str1); 
	}
	base (const base &bs3);
	~base()
	{
		if(str)
		delete []str;
	}
	    void print() { cout<<str<<endl;}
	base operator + (base bs);
	base operator = (base bs1);
};

base base: :o perator +(base bs)
{
	strcat(str,bs.str);
	size = strlen(str);
	return (str);
}
base base: :o perator =(base bs1)
{
	size = bs1.size;
	str = bs1.str;
	return (str);
}
base::base(const base &bs3)
{
	size = bs3.size;
	str = new char [ bs3.size ];
	strcpy(str,bs3.str);
}
int main()
{
	char obj1[80],obj2[80];
	try
	{
	cout<<" input:"<<endl;
	cin>>obj1;
	cin>>obj2;
	if(strlen(obj1) >10 || strlen(obj2) >10) throw err("\n leave for boards\n");
	}
catch(err ob)
{
	ob.get_error();
}
base s1(obj1),s2(obj2);
base s3;
	s3 =s1+s2;
	s3.print();
	
	system("pause");
	return 0;
}
error.cpp

Код: Выделить всё

class err
{
private:
	char array [33];
public:
	err(){}
	err(char *s)
	{
		strcpy(array,s);
	}
	char *get_error(){return array;}
};
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

ИМХО исключение должен бросать класс base у вас, а не функция main
исключение типа throw Exception();
И вообще, у вас все криво:

Код: Выделить всё

base operator = (base bs1);
//должно быть :
base& operator = (base& bs1);

Код: Выделить всё

base base: :o perator =(base bs1){
    size = bs1.size;
    str = bs1.str;
    return (str); //пытаемся вернуть char* вместо base ))
}
Приглашаю на свой блог о программировании: pro-prof.com
Аватара пользователя
rrrFer
Сообщения: 237
Зарегистрирован: 07 сен 2008, 14:15
Контактная информация:

вот как то так можно:

Код: Выделить всё

class exception{		//класс ошибки	
public:
	void virtual printError()=0;
};

class base{
//...
public:        
	class Lenght: public exception{
	public:
		void printError(){
			cout<<"Error: base::Lenght()"<<endl;
		}
	};
//...
 base( char *str1){
		size = strlen(str1);
		if(size >5) 
			throw &Lenght();
        str = new char[size+1];
        strcpy(str,str1);
    }
//...
};
//...
 try{
		base s1(obj1),s2(obj2),s3;
		s3=s1+s2;
		s3.print();
    }
	catch(exception *exp){
		exp->printError();
	}
Приглашаю на свой блог о программировании: pro-prof.com
Ответить