GCC - "expected unqualified-id before ')' token"

7

请耐心等待,我正在学习C++。

我正在尝试编写我的头文件(用于类),但遇到了一个奇怪的错误。

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

“expected unqualified-id before ')' token”是什么意思?我做错了什么吗?
编辑:抱歉,我没有发布整个代码。
/*
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"单独编译头文件。

编辑:问题已关闭。我的代码现在可以正常工作了。谢谢大家! 编辑:阅读《礼仪:关闭您的帖子》后重新打开问题。


抱歉,我会查阅 #define 而不是复制我的教授代码。 - epochwolf
4个回答

13
您的问题出在您的#define上。您定义了#define Card,所以现在任何地方出现Card这个单词,它都会被替换。
通常,如果#define Token没有附加的标记,就像#define Token Replace,它将使用值1
移除#define Card,这会使第22行读取:1();();,从而引起问题。

谢谢您的解释。现在我明白了。我想我会在书上多读一些。教授似乎跳过了一些细节。 - epochwolf

4

删除#define语句,它们会破坏文件。你是想实现一个包含保护吗?那应该像这样:

#ifndef CARD_H
#define CARD_H

class Card ...
...

#endif

新答案:

这意味着当前行中未定义字符串string。请尝试使用标准库的std::string


请确保包含<string>。 - Jesse Beder
我刚刚编辑了问题,以显示文件的顶部。对此感到抱歉。 - epochwolf
是的,那就是问题所在。我忘记添加包含保护了。 - epochwolf

2
只是我个人的看法,但我猜你使用了预编译头。
#define Card
#define Hand
#define AppError

就好像你想告诉编译器:“嘿,类Card、Hand和AppError在其他地方有定义”(即前向声明)。

即使我们忽略宏是令人痛苦的原因,正如John Millikin所说,它会搞乱你的文件,也许你想写的是这样的东西:

class Card ;
class Hand ;
class AppError ;

这些是那些类的前置声明


0

移除#define Card


抱歉,我没有展示完整的文件。问题已经被编辑过了。 - epochwolf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接