繁体   English   中英

在初始化列表中使用clang 3.1

[英]Using clang 3.1 with initializer lists

当我编译这段代码时:

template<typename T>
struct S {
  std::vector<T> v;
  S(initializer_list<T> l) : v(l) {
    std::cout << "constructed with a " << l.size() << "-element list\n";
  }
};

使用以下命令行:

 clang++ -std=c++11 -stdlib=libc++ initializer_list.cpp

我收到以下错误。

initializer_list.cpp:12:23: error: expected ')'
    S(initializer_list<T> l) : v(l) {

有人知道该修复程序吗?

提前致谢

您可能打算编写std::initializer_list<T> 确保包括<initializer_list>

您的代码示例不完整。 如果您可以提供完整的示例,将很有用。 编写的代码的问题是您丢失了

#include <initializer_list>
#include <vector>
#include <iostream>

...,并且initializer_list位于命名空间std ,因此,您的构造函数声明中也缺少std::

但是,由于您声称这都不是问题,因此最可能的原因似乎是您的C ++标准库实现未提供std::initializer_list 如果Clang使用的是GCC的libstdc ++,并且您没有安装该版本的适当新版本,那就是这种情况:您至少需要版本4.4,但请注意,需要一个补丁程序来修复libstdc ++-4.4中的错误,以使它可以在C ++ 11模式下与Clang一起使用,否则您将收到有关type_info和其他各种问题的错误。

另外,您说您收到的诊断是这样的:

initializer_list.cpp:12:23: error: expected ')'
    S(initializer_list<T> l) : v(l) {
                      ^

(我从提供的列号重构了插入记号;将其保留在以后的问题中将很有用。)对于以上任何解释,这都不是Clang产生的第一个诊断; 可能是这样的:

initializer_list.cpp:12:5: error: no template named 'initializer_list'; did you mean 'std::initializer_list'?
  S(initializer_list<T> l) : v(l) {
    ^~~~~~~~~~~~~~~~
    std::initializer_list

因此,您可能错过了问题的第一条诊断信息,或者问题是您在问题中省略的代码中声明了其他一些(非template )类型的名称为initializer_list ,并且隐藏了std::initializer_list 如果没有看到其余的代码或其余的诊断信息,就无法分辨出哪个。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM