【问题标题】:C++11 typedef alias compile errorC++11 typedef别名编译错误
【发布时间】:2014-04-07 18:08:53
【问题描述】:

当我尝试编译它时,我收到以下错误:

error: expected unqualified-id before ‘using’

我知道,之前有人问过这个问题,但我没有找到答案。通常他们说其中一个头文件中缺少分号。但现在情况并非如此。当然,我使用-std=c++0x 标志

#include <iostream>
#include <string>
#include <vector>


template <typename T>
using stringpair = std::pair<std::string, T>;

int main (int argc, char* argv[]) {


    return 0;
}

【问题讨论】:

  • 什么编译器和版本?

标签: c++ c++11 alias typedef


【解决方案1】:

您的错误 is caused 是因为 template aliases with using 是 C++11 功能并且您的编译器不支持它。您应该在编译时添加相应的标志。最有可能的是:

-std=c++11

(至少对于g++clang++)。

Live demo

否则你的编译器还不支持它们。 GCCsupports them from 4.7.

【讨论】:

  • 我知道,我正在编译,使用这个选项
  • @balping,很抱歉,但这是重现该错误的唯一方法。因此,您显然没有使用该选项进行编译。
  • @balping,也许你的编译器还不支持它。据我所知,所有 MSVC、GCC 和 Clang 都在其最新版本中支持此功能。
  • @AdamH.Peterson,模板别名were introduced in 4.7
  • 模板别名和-std=c++11 都是在 GCC 4.7 系列中引入的,早期版本使用标志-std=c++0x 来启用对“下一个”C++ 版本的支持。因此,如果 (g++) 编译器接受 -std=c++11,它也应该接受模板别名。
猜你喜欢
  • 2013-08-19
  • 2013-07-13
  • 2019-07-10
  • 1970-01-01
  • 2021-08-24
  • 2017-04-09
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多