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 ;
这是这些类的前向声明。