2008-09-19 12 views
6

Proszę o zachowanie mnie, uczę się tylko języka C++.GCC - "oczekiwano niekwalifikowanego identyfikatora przed") "tokena"

Próbuję napisać mój plik nagłówkowy (dla klasy) i mam dziwny błąd.

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

Co oznacza "oczekiwany niekwalifikowany identyfikator" przed "znacznikiem"? I co robię źle?

Edycja: Przepraszamy, nie opublikowałem całego kodu.

/* 
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); 

Edytuj: Po prostu próbuję skompilować plik nagłówka samodzielnie, używając "g ++ file.h".

Edycja: Zamknięte pytanie. Mój kod działa teraz. Dziękuję wszystkim! Edit: Ponowne pytanie po przeczytaniu Etiquette: Closing your posts

+0

Przepraszam, będę wyszukiwał #define zamiast kopiować kod mojego profesora. – epochwolf

Odpowiedz

11

Twój problem jest następujący: #define. Zrobiłeś #define Card, więc teraz wszędzie, gdzie Card jest postrzegany jako token, zostanie on zastąpiony.

Zazwyczaj #define Token bez dodatkowego tokenu, jak w #define Token Replace, będzie używał wartości 1.

Usunąć #define Card, ponieważ linia nr 22 brzmi: 1(); lub ();, co powoduje skargę.

+0

Dziękuję za wyjaśnienia. Teraz ma to sens. Myślę, że przeczytam w mojej książce. Profesor wydaje się pomijać szczegóły. – epochwolf

0

Wyjmij kartę #define.

+0

Niestety, nie pokazałem całego pliku. Pytanie zostało zredagowane. – epochwolf

4

(edycja dla zaktualizowanego pytanie)

Usuń sprawozdań #define, oni maglowania plik. Czy próbowałeś wprowadzić strażnik? To byłoby coś takiego:

#ifndef CARD_H 
#define CARD_H 

class Card ... 
... 

#endif 

stary odpowiedź:

Oznacza to, że string nie jest zdefiniowane w bieżącej linii. Wypróbuj std::string.

+0

Upewnij się, że dołączono . –

+0

Właśnie edytowałem pytanie, aby pokazać górną część pliku. Przepraszam za to. – epochwolf

+0

Yup, to był problem. Zapomniałem dodać strażnik dołączający. – epochwolf

2

Tylko moje dwa centy, ale myślę, że użyłeś skompilowane nagłówek

#define Card 
#define Hand 
#define AppError 

jakby chciał powiedzieć kompilator „Hej, karta klasy, rąk i AppError są zdefiniowane gdzie indziej” (tj deklaracje forward).

Nawet jeśli zignorujemy makra faktycznie są uciążliwe dla dokładnych powodów kod nie kompilacji (jako John Millikin umieścić go, maglowania plik), być może to, co chciałem napisać było coś takiego:

class Card ; 
class Hand ; 
class AppError ; 

Które są forward-deklaracje tych klas.

Powiązane problemy