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()’
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()’
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 czytalem o sposobie zapisu tekstu w globalnej tablicy typu char ale probowalem sam jakos to roziwazac temat do zamkniecia