[C++][Visual studio 10]Klasa wyjątków

diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: diego_maradona »

Napisałem taką oto klasę wyjątków

Kod: Zaznacz cały

#ifndef H_tornadoException 
#define H_tornadoException

#include "stdafx.h"
#include <string>

class tornadoException
{
public:
	tornadoException(): message("Tornado: Take cover immediately!"){}
	
	tornadoException(int m)
	{
		message = "Tornado: "+ int2string(m)+ " miles away; and approaching!";
	}
	
	string what()
	{		
		return message;
	}

private:

string message;

};
#endif
nie rozumiem dlaczego po skompilowaniu jest błąd
1>c:\users\michal\documents\visual studio 2010\projects\tornado_exception\tornado_exception\tornadoException.h(17): error C2146: syntax error : missing ';' before identifier 'what'
chlorofil
Użytkownik
Użytkownik
Posty: 548
Rejestracja: 16 cze 2010, o 18:30
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 29 razy
Pomógł: 96 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: chlorofil »

Nie sprawdzałem, ale wydaje mi się, że brakuje:

Kod: Zaznacz cały

using namespace std;
Awatar użytkownika
argv
Użytkownik
Użytkownik
Posty: 569
Rejestracja: 27 maja 2009, o 01:27
Płeć: Mężczyzna
Podziękował: 51 razy
Pomógł: 66 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: argv »

Jw, ale:

Uwaga 1: Mam nadzieję, że definiowanie klasy w pliku nagłówkowym to przez przypadek.
Uwaga 2: Nie używa się "using namespace ..." w plikach nagłówkowych. To bardzo zły zwyczaj - pogooglaj czemu. Zamiast tego użyj

Kod: Zaznacz cały

std::string
.
diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: diego_maradona »

Podobno wyjątkowo klasy wyjątków definiuje się w nagłówku, nie wiem czemu ale skoro taka jest konwencja to się tego trzymam.

PS. Po zastosowaniu się do Waszych wskazówek wszystko działa
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: Afish »

Deklaruje, a nie definiuje, a to jest różnica nie tylko w wymowie. Ale w Twoim kodzie wszystko jest okej. Wypadałoby jednak umieścić klasę w jakimś swoim namespace, żeby potem uniknąć ewentualnych konfliktów i ładnie podzielić kod.
diego_maradona
Użytkownik
Użytkownik
Posty: 184
Rejestracja: 16 cze 2010, o 00:59
Płeć: Mężczyzna
Lokalizacja: Kraków
Podziękował: 80 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: diego_maradona »

Chodziło mi o to, że w pliku .h umieszcza się prototypy funkcji członkowskich, ale w klasach powyższego typu- z tego co zauważyłem- wyjątkowo umieszcza się pełne definicje.
chlorofil
Użytkownik
Użytkownik
Posty: 548
Rejestracja: 16 cze 2010, o 18:30
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 29 razy
Pomógł: 96 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: chlorofil »

argv pisze: Uwaga 2: Nie używa się "using namespace ..." w plikach nagłówkowych. To bardzo zły zwyczaj
Potwierdzam. W plikach .c* można, ale w nagłówkowych absolutnie zakazane. Trzeba stosować "fully qualified name", czyli std::cout itp.
Crizz
Użytkownik
Użytkownik
Posty: 4094
Rejestracja: 10 lut 2008, o 15:31
Płeć: Mężczyzna
Lokalizacja: Łódź
Podziękował: 12 razy
Pomógł: 805 razy

[C++][Visual studio 10]Klasa wyjątków

Post autor: Crizz »

diego_maradona pisze:Chodziło mi o to, że w pliku .h umieszcza się prototypy funkcji członkowskich, ale w klasach powyższego typu- z tego co zauważyłem- wyjątkowo umieszcza się pełne definicje.
To nie ma znaczenia, umieszczanie definicji metod klasy w pliku nagłówkowym może natomiast (ale nie musi) zależeć od tego, czy chcemy, by metoda została potraktowana jako funkcja "inline".
ODPOWIEDZ