Thinking in c++. Problem z zadaniami do rozdziału o wyjątkac

Witam. Przeczytałem pierwszy rozdział drugiego tomu “Thinking in c++”. Mój problem jest taki, że nie wiem czy jestem taki ograniczony czy też błędy popełniły osoby tłumaczące książkę ponieważ nie rozumiem treści zadań. Niby czytam fragment po fragmencie zadanie i pisze kod w cb ale kod się nie kompiluje. Nadmieniam, że C++ uczę się od roku i przeczytałem Symfonię oraz C++ dla każdego.

Jeżeli czytasz “Thinking in C++” to znaczy że czytasz oryginał i nie było żadnego tłumacza.

Jeżeli zaś czytasz “Myślenie w C++” to owszem jest kilka błędów tłumaczenia ale wszystko da się zrozumieć z kontekstu.

Skoro piszesz kod a on się nie kompiluje to na 100% tłumacz nie ma z tym nić wspólnego.

Znalazłem jedno rozwiązanie zadania na stronie codersity. Jest błąd w zadaniu lub jest to “złośliwość” autora.

A możesz zdradzić treść tego zdania?

Oto treść zadania: Stwórz klasę z funkcją składową wyrzucającą wyjątki. W tej klasie dopisz klasę zagnieżdżoną, która będzie używana jako szablon obiektów wyjątków. Parametrem będzie char* odpowiadający łańcuchowi z opisem. Dodaj metodę wyrzucającą jako wyjątek obiekt klasy wewnętrznej (od razu zadeklaruj ten fakt w specyfikacji wyjątków funkcji). Napisz blok try wywołujący tę funkcję i frazę catch obsługującą wyjątek przez pokazanie łańcucha z opisem.

A co konkretnie źle jest w tym zadaniu?

Podczas kompilacji kompilator wyrzuca błąd, że parametr char* nie może być parametrem w szablonie. Pomijam już to, że w kodzie nic nie rzuciłem i nie złapałem w blokach try i catch.

Dodane 11.02.2011 (Pt) 14:01

Oto mój kod

#include

#include

using namespace std;

class X

{

public:

template class MyException

{

public:

char* what(){return msg;}

};

void f() throw(MyException<“wyrzucono z X::f”>)

{

throw MyException<“wyrzucono z X::f”>();

}

};

int main()

{

try

{

}

catch

{

}

getch();

return 0;

}

Dodane 11.02.2011 (Pt) 14:02

Wyrzuca mi takie błędy

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp|18|error: ‘“wyrzucono z X::f”’ is not a valid template argument for type ‘char*’ because string literals can never be used in this context|

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp||In member function ‘void X::f()’:expressionless:

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp|20|error: ‘“wyrzucono z X::f”’ is not a valid template argument for type ‘char*’ because string literals can never be used in this context|

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp||In function ‘int main()’:expressionless:

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp|31|error: expected ‘(’ before ‘{’ token|

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp|31|error: expected type-specifier before ‘{’ token|

C:\Documents and Settings\xxx\Moje dokumenty\123.cpp|31|error: expected ‘)’ before ‘{’ token|

||=== Build finished: 5 errors, 0 warnings ===|

No właśnie, rozwiązanie zaś powinno być mniej więcej takie:

#include using namespace std;

Wielkie dzieki Alex :slight_smile: czytalem o sposobie zapisu tekstu w globalnej tablicy typu char ale probowalem sam jakos to roziwazac :slight_smile: temat do zamkniecia :slight_smile: