[英]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.