2008-09-19 24 views
6

Tenga paciencia, solo estoy aprendiendo C++.GCC - "esperado ID no calificado antes ')' token"

Estoy tratando de escribir mi archivo de cabecera (para la clase) y me encuentro con un error extraño.

cards.h:21: error: expected unqualified-id before ')' token 
cards.h:22: error: expected `)' before "str" 
cards.h:23: error: expected `)' before "r" 

¿Qué significa "espera un-id-calificado antes ')' token"? ¿Y qué estoy haciendo mal?

Editar: Lo siento, no publiqué el código completo.

/* 
Card header file 
[Author] 
*/ 
// NOTE: Lanugage Docs here http://www.cplusplus.com/doc/tutorial/ 

#define Card 
#define Hand 
#define AppError 

#include <string> 

using namespace std; 


// TODO: Docs here 
class Card { // line 17 
    public: 
     enum Suit {Club, Diamond, Spade, Heart}; 
     enum Rank {Two, Three, Four, Five, Six, Seven, Eight, Nine, 
        Ten, Jack, Queen, King, Ace}; 
     Card(); // line 22 
     Card(string str); 
     Card(Rank r, Suit s); 

Editar: Sólo estoy tratando de compilar el archivo de cabecera por sí mismo utilizando "g ++ file.h".

Editar: Cerrado pregunta. Mi código está funcionando ahora. ¡Gracias a todos! Editar: Reabierto pregunta después de leer Etiquette: Closing your posts

+0

Lo siento, buscaré #define en lugar de copiar el código de mi profesor. – epochwolf

Respuesta

11

Tu problema es tu #define. Lo hizo #define Card, por lo que ahora en todas partes Card se ve como un token, será reemplazado.

Normalmente un #define Token sin token adicional, como en #define Token Replace utilizará el valor 1.

Quite #define Card, está haciendo que la línea 22 lea: 1(); o ();, lo que está causando la queja.

+0

Gracias por la explicación. Eso tiene sentido ahora. Creo que leeré un poco en mi libro. El profesor parece estar omitiendo detalles. – epochwolf

0

retire la tarjeta #define.

+0

Lo siento, no mostré el archivo completo. La pregunta ha sido editada. – epochwolf

4

(editado para la pregunta actualizada)

Retire las declaraciones #define, que están destrozando el archivo. ¿Estabas tratando de implementar un protector de inclusión? Eso sería algo como esto:

#ifndef CARD_H 
#define CARD_H 

class Card ... 
... 

#endif 

vieja respuesta:

Significa que string no está definido en la línea actual. Pruebe std::string.

+0

Y asegúrese de que esté incluido. –

+0

Acabo de editar la pregunta para mostrar la parte superior del archivo. Lo siento por eso. – epochwolf

+0

Sí, ese era el problema. Olvidé agregar el protector de inclusión. – epochwolf

2

Sólo mis dos centavos, pero supongo que utilizó el encabezado precompilado

#define Card 
#define Hand 
#define AppError 

como si quisiera decirle al compilador "Hey, la Tarjeta de clases, la mano y AppError se definen en otro lugar" (es decir, declaraciones adelante).

Incluso si ignoramos las macros de hecho son un dolor por las razones exactas de su código no compile (como John Millikin puso, destrozando su archivo), tal vez lo que quería escribir era algo así como:

class Card ; 
class Hand ; 
class AppError ; 

que son declaraciones-forward de esas clases.

Cuestiones relacionadas