Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] Małe zdumienie przy kompilacji przykładowego kodu.

Ostatnio zmodyfikowano 2013-11-26 07:54
Autor Wiadomość
f651144
Temat założony przez niniejszego użytkownika
[c++] Małe zdumienie przy kompilacji przykładowego kodu.
» 2013-11-25 21:50:39
Mała zagadka.
Na chwilę obecną nie potrafię sobie z tym poradzić (szczerze mówiąc, to nie mam na to za dużo czasu), ale do rzeczy!

Oto kod:
C/C++
// exception::what
#include <iostream>       // std::cout
#include <exception>      // std::exception

struct ooops
    : std::exception
{
    const char * what() const noexcept { return "Ooops!\n"; }
};

int main() {
    try {
        throw ooops; // 11 to tu XD
    } catch( std::exception & ex ) {
        std::cout << ex.what();
    }
    return 0;
}
Powyższy kod nie działa. Komunikat błędu:
|11|error: expected primary-expression before ';' token|

I teraz najlepsze: to jest przykładowy kod wykorzystania std::exception ze strony cplusplus.com. Dlaczego mój szanowny kompilator (MinGW, kompiluje w standardzie c++11) nie dopuszcza konstrukcji "return NowyObiek"? To jest coś nie zgodnego ze standardem? Przysiągłbym, że wszystko jest ok.

Oczywiście taki kod działa bez zarzutu:
C/C++
// exception::what
#include <iostream>       // std::cout
#include <exception>      // std::exception

struct ooops
    : std::exception
{
    const char * what() const noexcept { return "Ooops!\n"; }
};

int main() {
    try {
        ooops o;
        throw o;
    } catch( std::exception & ex ) {
        std::cout << ex.what();
    }
    return 0;
}
Dlaczego? Z góry dziękuje za wszelką pomoc.
P-97505
pekfos
» 2013-11-25 22:10:58
C/C++
throw ooops();

P-97511
Wiesiek
» 2013-11-26 07:54:38
oops jest nazwą typu zmiennej. Rzucając wyjątek używamy zmiennej, a nie typu.
P-97541
« 1 »
  Strona 1 z 1