【问题标题】:Expected unqualified-id before 'xor' token'xor' 令牌之前的预期不合格 ID
【发布时间】:2014-10-12 16:15:30
【问题描述】:

为什么 g++ 编译器会说:error: expected unqualified-id before 'xor' token

class BigInteger{
public:
    unsigned *array;

    BigInteger xor(BigInteger bi){    // g++ indicates error this line
        BigInteger n;
        if(bi.array == (unsigned*)0){
            return n;
        }
        return n;
    }
};

【问题讨论】:

  • 无法重现该错误。而且您指定的地点附近没有^
  • @jww:那你为什么不把它添加到标签列表中呢?
  • @jww:你把g++从标题中去掉,留下一个标签不应该在标题中重复的评论。但g++ 不在标签中。
  • @ben - 你是对的,我的错。我没有选票了,所以我现在只能做一些琐碎的工作,比如主页上的警察头衔。

标签: c++ compiler-errors g++


【解决方案1】:

xor 是 C++ 中^替代标记,您不能将其用作标识符。 or/bitorand/bitand (分别为|||&&&)和其他一些相同。它们本质上是iffor 之类的关键字。

为您的函数选择一个不同的名称。

替代标记的完整列表(C++ 标准 §2.12 关键字,有关映射,请参见 §2.6 替代标记):

  • and_eq
  • 比特和
  • 比特
  • 复杂
  • 不是
  • not_eq
  • or_eq
  • 异或
  • xor_eq

【讨论】:

  • 是的,这很糟糕。违背了保持语言本身的语言设计原则,特别是关键字数量,简短而甜美,并尽可能多地使用库。但它已成为标准。
  • 好的一面是,你可以写成operator xor
  • @Ben:确实。不完全确定这是否是 OP 的目的。
【解决方案2】:

呻吟。是的,这正是那些追逐你的尾巴然后意识到“什么?”的事情之一。和摇头的情况。

在我的情况类似,我有一个类定义,它定义了一个类方法:

List* xor(List* list)

然后得到 g++ 有用的错误消息: 错误:'^' 标记之前的预期 unqualified-id

最终发现 xor 是 ^ 的同义词,因此不能是函数名。

更糟糕的是(在我的情况下)这在 Visual Studio 下的 MS Windows 中完美运行(在我的情况下为 2010)。并且是自 1999 年以来一直在通过各种 Visual Studio 版本开发的代码(Visual Studio 6)。

所以现在我需要重命名函数并在 Windows 上重建以及在 linux 上重建 g++...随着您的工作而变得越来越大的问题之一。

【讨论】:

    猜你喜欢
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多