2010-05-13 6 views
1

Lorsque vous voulez hériter d'une classe en C++, est-il illégal de déclarer std dans la première ligne ci-dessous?hériter d'une déclaration de classe en C++

#ifndef HWEXCEPTION_H 
#define HWEXCEPTION_H 

#include <stdexcept> 


class HWException : public std::run_time_error 
{ 
    void testException(int num); 
}; 

#endif 

vs

using std::run_time_error 
class MyClass : public run_time_error 

Ceci suppose que vous avez #include en haut. Je reçois des erreurs de compilation pour avoir std :: run_time_error, mais ne semble pas le faire en second lieu et je me demandais pourquoi.

error C2039: 'run_time_error' : is not a member of 'std' 
'run_time_error' : base class undefined 
1>main.cpp 
error C2039: 'run_time_error' : is not a member of 'std' 
error C2504: 'run_time_error' : base class undefined 
+1

+1 Aurait-il utilisé un '?'? Bien sûr, mais c'est une question légitime et ne devrait pas avoir été downvoted à cause d'une erreur dans la ponctuation. – andand

+0

@Suma "est-il illégal d'avoir déclaré std dans la première ligne ci-dessous" semble être une question suffisamment claire, même s'il manque un point d'interrogation. –

+0

Si vous obtenez une erreur pour la première version (ce qui est préférable, voir la réponse de Neil), alors cette erreur ne figure pas dans le code que vous avez montré. Si vous ne pouvez pas résoudre ce problème, je vous suggère de mettre un dix-ligne (inclut nécessaire et tous, entièrement compilable, sauf pour l'erreur que vous voyez) que nous pouvons coller dans nos éditeurs et essayer nous-mêmes dans une nouvelle question et demander Aidez-moi. – sbi

Répondre

4

Les deux sont légaux. Mais en supposant que ce soit dans un fichier d'en-tête, vous ne devriez pas utiliser la version de directive using, car elle place le nom dans l'espace de noms global, ce qui peut causer des problèmes aux utilisateurs de votre en-tête.

Edit: juste remarqué que vous avez le mauvais nom de classe:

#include <stdexcept> 
class MyClass : public std::runtime_error { 
}; 

est ce que vous avez besoin.

+0

Oui, désolé, noob erreur. – Crystal