2011-08-27 16 views
6

Próbuję skompilować to z g ++ pod Ubuntu:kompilacji błąd podczas próby dziedziczą std :: runtime_error

#ifndef PARSEEXCEPTION_H 
#define PARSEEXCEPTION_H 

#include<exception> 
#include<string> 
#include<iostream> 

struct ParseException : public std::runtime_error 
{ 
    explicit ParseException(const std::string& msg):std::runtime_error(msg){}; 
    explicit ParseException(const std::string& token,const std::string& found):std::runtime_error("missing '"+token+"',instead found: '"+found+"'"){}; 

}; 

#endif 

otrzymuję błędów wiadomość:

In file included from parseexception.cpp:1: 
parseexception.h:9: error: expected class-name before ‘{’ token 
parseexception.h: In constructor ‘ParseException::ParseException(const std::string&)’: 
parseexception.h:10: error: expected class-name before ‘(’ token 
parseexception.h:10: error: expected ‘{’ before ‘(’ token 
parseexception.h: In constructor ‘ParseException::ParseException(const std::string&, const std::string&)’: 
parseexception.h:11: error: expected class-name before ‘(’ token 
parseexception.h:11: error: expected ‘{’ before ‘(’ token 
enter code here 

mam Miałem ten problem od jakiegoś czasu i nie mogę naprawdę powiedzieć, co jest z nim nie tak:/

Odpowiedz

14

Kompilator poprzez swoje komunikaty o błędach mówi Ci ważne rzeczy. Jeżeli weźmiemy pod uwagę tylko pierwszy komunikat (zawsze jest dobrą rzeczą, aby zadbać o jednym Problemy z kompilacją po drugim, zaczynając od pierwszego, który wystąpił):

parseexception.h:9: error: expected class-name before ‘{’ token 

Dowiesz się, aby spojrzeć na linii 9. Jest problem w kodzie tuż przed "{": nazwa klasy jest nieprawidłowa. Można z tego wywnioskować, że kompilator może nie wiedzieć, czym jest "std :: runtime_error". Oznacza to, że kompilator nie znajdzie "std :: runtime_error" w podanych nagłówkach. Następnie musisz sprawdzić, czy zawierałeś poprawne nagłówki.

Szybkie wyszukiwanie w dokumentacji referencyjnej C++ powie Ci, że std :: runtime_error jest częścią nagłówka <stdexcept>, a nie <exception>. To powszechny błąd.

Po prostu musisz dodać ten nagłówek, a błąd zniknął. Z innych komunikatów o błędach kompilator mówi tylko o tych samych rzeczach, ale w konstruktorach.

Nauka czytania komunikatów o błędach kompilatora jest bardzo ważną umiejętnością, aby uniknąć problemów z kompilacją.

+0

dzięki dużo Nikko: D – SlimJim

+0

+1 za ojcowską radę :) – Chani

6

to <stdexcept>.

+0

Wszyscy edytujemy twój podpis. Równie dobrze może przestać to pisać. Uratuj nas trochę kłopotów. _ To byłoby uprzejme. :-) –

+0

@Tomalak: SO ma wielu dziecinnych użytkowników, nie interesuje mnie ich osobista część, tyle tylko, że jest smutny w globalnym obrazie. –

+0

Childish uparcie odmawia przyjęcia popularnej opinii. :( –

1

Musisz mieć pełną definicję std::runtime_error dostępną w punkcie, z którego ją wyprowadzasz.

#include <stdexcept> 
Powiązane problemy