2008-09-19 2 views
6

Пожалуйста, несите меня, я просто изучаю C++.GCC - «ожидаемый неквалифицированный идентификатор до») «токен»

Я пытаюсь написать свой заголовочный файл (для класса), и я столкнулся с нечетной ошибкой.

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

Что означает «ожидаемый неквалифицированный идентификатор раньше»? «Токен» означает? И что я делаю неправильно?

Редактировать: Извините, я не опубликовал весь код.

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

Редактировать: Я просто пытаюсь скомпилировать файл заголовка самостоятельно, используя «g ++ file.h».

Редактировать: закрытый вопрос. Теперь мой код работает. Всем спасибо! Edit: Возобновлена ​​вопрос после прочтения Etiquette: Closing your posts

+0

Извините, я буду искать #define, а не копировать код моего профессора. – epochwolf 2008-09-19 22:38:27

ответ

11

Ваша проблема - ваш #define. Вы сделали #define Card, так что теперь везде Card рассматривается как токен, он будет заменен.

Обычно #define Token без дополнительного токена, как в #define Token Replace будет использовать значение 1.

Удалить #define Card, это делает строку 22 следующей: 1(); или ();, что вызывает жалобу.

0

Снимите #define карты.

+0

К сожалению, я не показывал весь файл. Вопрос был отредактирован. – epochwolf 2008-09-19 22:28:05

4

(отредактированный для обновленного вопроса)

Удалите #define заявления, они коверкая файл. Вы пытались внедрить защитника? Это было бы что-то вроде этого:

#ifndef CARD_H 
#define CARD_H 

class Card ... 
... 

#endif 

старый ответ:

Это означает, что string не определен в текущей строке. Попробуйте std::string.

+0

И убедитесь, что включен . – 2008-09-19 22:27:05

+0

Я только что отредактировал вопрос, чтобы показать верхнюю часть файла. Извини за это. – epochwolf 2008-09-19 22:28:56

2

Просто мои два цента, но я предполагаю, что вы использовали предварительно скомпилированных заголовков

#define Card 
#define Hand 
#define AppError 

, как если бы вы хотели сказать компилятор «Эй, карта классов, рук и AppError определены в другом месте» (т.е. вперед-декларация).

Даже если игнорировать тот факт, макросы боль для точных причин ваш код не компилировать (как Джон Милликин выразился, коверкая свой файл), возможно, что вы хотели написать что-то вроде:

class Card ; 
class Hand ; 
class AppError ; 

форвардные декларации этих классов.

Смежные вопросы