GCC-"')'令牌之前的预期非限定ID"

时间:2020-03-06 14:28:06  来源:igfitidea点击:

请多多包涵,我正在学习C ++。

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

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

"')'令牌之前的预期非限定ID"是什么意思?我在做什么错呢?

编辑:对不起,我没有发布整个代码。

/*
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, Hyman, Queen, King, Ace};
        Card(); // line 22
        Card(string str);
        Card(Rank r, Suit s);

编辑:我只是试图使用" g ++ file.h"本身编译头文件。

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

解决方案

卸下#define卡。

(针对更新的问题进行了编辑)

删除#define语句,它们正在处理文件。我们是否要实施包含保护程序?那将是这样的:

#ifndef CARD_H
#define CARD_H

class Card ...
...

#endif

旧答案:

这意味着在当前行中未定义"字符串"。试试std :: string

问题是#define。我们执行了#define Card,所以现在到处都将Card视为令牌,它将被替换。

通常,没有添加令牌的" #define Token"(如" #define Token Replace"中的)将使用值" 1"。

删除" #define Card",它使第22行显示为" 1();"或者"();",这引起了投诉。

只是我的两分钱,但我猜我们使用了预编译的标头

#define Card
#define Hand
#define AppError

就像我们想告诉编译器"嘿,Card,Hand和AppError类是在其他位置定义的"(即,前向声明)。

即使我们忽略了事实宏是由于代码未编译的确切原因(如John Millikin所说的那样,对文件进行了处理)而痛苦的事实,也许我们想要编写的内容如下:

class Card ;
class Hand ;
class AppError ;

这是这些类的前向声明。