【问题标题】:Compiler error: expected unqualified-id before ‘using’ [duplicate]编译器错误:“使用”之前预期的不合格 ID [重复]
【发布时间】:2016-05-01 21:31:05
【问题描述】:

我正在尝试编译这段 c++ 代码

template<int I> using Foo = int;
using Bar = int;

并得到这些编译器错误(使用g++ -c test.cpp

test.cpp:1:17: error: expected unqualified-id before ‘using’
 template<int I> using Foo = int;
test.cpp:2:7: error: expected nested-name-specifier before ‘Bar’
 using Bar = int;

【问题讨论】:

  • 这不是一个很好的自我回答问题,因为您提供的信息不足以让任何人知道答案是什么。你应该有一个minimal reproducible example 并展示它是如何编译的。
  • 已编辑以提供完整、最小且可编译的示例。实际上,我认为这种特异性对于试图找出问题根源的人来说不太有用……但我想这就是规则。

标签: c++ c++11 g++


【解决方案1】:

我的问题是语法错误,正如大多数针对此错误的解决方案所建议的那样,而不是任何典型的解决方案。

当您尝试使用较旧的标准修订版编译它们时,较新的(从 c++11 开始)类型别名形式的“using”也会报告此错误。添加 g++ 选项 -std=c++11(或后来的标准选项之一)让 g++ 知道它需要使用 c++11 功能编译您的代码。

【讨论】:

  • 我不确定“打开 C++11 以使用 C++11”的自我回答问答是否真的有必要。
  • 我搜索了将近一个小时,试图弄清楚为什么会报告此错误,结果却发现我认为已打开的选项不是默认选项。去搜索。 “为什么我收到此错误”的每个答案都是“您缺少分号”或“您在某些头文件中有语法错误”。错误的根本原因在错误文本或任何其他已回答(或从我所知道的)问题中并不明显。
  • 那是因为阅读文档的小失误在这里并不是一个好问题。此类问题通常会被关闭。
  • 我想说的重点是“类型别名是 c++11 的一项功能”,我什至几乎不使用模板,所以我不知道这一点。如果您已经知道它是 c++11 功能,它只能是指定答案的副本。我不打算重新打开它,但它不是那个问题的重复。
  • Google 上“C++ 类型别名”的第一个结果是 C++ 类型别名的 cppreference.com 文档,其中包含“(since C++11)”页面顶部的粗体字母。我们不在这里做“我没有阅读文档”的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多