2011-08-27 28 views
6

Ben Ubuntu altında g ++ ile bu derlemek çalışıyorum: Benderleme hatası :: runtime_error

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 

:

#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 

hata-mesajı alıyorum Bu sorun şu anda bir süredir vardı ve ben bununla yanlış bir şey göremiyorum:/

cevap

14

Derleyici, hata iletileri aracılığıyla önemli şeyleri anlatır. Biz sadece ilk mesajı alırsan (oluştuğu ilk tarafından başlayarak daima birer derleme sorunları tek bakmak iyi bir şeydir): Bu Orada 9 hattı bakmak söyler

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

"{"'dan hemen önceki koddaki bir sorun: sınıf adı geçersiz. Bundan derleyici, "std :: runtime_error" ifadesinin ne olduğunu bilmeyebilir. Bu, derleyicinin, sağladığınız başlıklarda "std :: runtime_error" ifadesini bulamadığı anlamına gelir. Daha sonra doğru başlıkların dahil olup olmadığını kontrol etmeniz gerekir.

C++ başvuru belgelerinde yapılan hızlı bir arama, std :: runtime_error öğesinin, <exception> değil <stdexcept> başlığının bir parçası olduğunu söyleyecektir. Bu yaygın bir hata.

Sadece bu başlığı eklemek zorundasınız ve hata gitti. Diğer hata iletilerinden derleyici, hemen hemen aynı şeyleri anlatıyor, ancak yapıcılarda.

Derlemenin hata mesajlarını okumayı öğrenmek, derleme sorunlarının engellenmesini önlemek için çok önemli bir beceridir.

+0

sağolsun Nikko: D – SlimJim

+0

+1 Baba tavsiyesi için :) – Chani

6

, <stdexcept>'u içerir.

+0

Hepiniz imzalarınızı düzenliyoruz. Yazmayı kesebilirsin. Bize biraz sıkıntı ver. _That_ kibar olur. :-) –

+0

@Tomalak: Çok fazla çocuksu kullanıcısı var, bunun kişisel bir parçası umurumda değil, sadece küresel resimde üzücü. –

+0

Childish, popüler düşünceyi inatla kabul etmeyi reddediyor. :( –

1

Ondan elde ettiğiniz noktada std::runtime_error tam tanımına sahip olmanız gerekir.

#include <stdexcept>