编译此代码时:
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) {
有没有人知道修复,如果有的话?
提前致谢
答案 0 :(得分:2)
你可能想写std::initializer_list<T>
。确保包含<initializer_list>
。
答案 1 :(得分:2)
您的代码示例不完整。如果您能提供完整的示例,那将非常有用。编写代码的问题在于您缺少
#include <initializer_list>
#include <vector>
#include <iostream>
...而initializer_list
位于命名空间std
中,因此您也错过了构造函数声明中的std::
。
但是,由于您声称这些都不是问题,最可能的原因似乎是您的C ++标准库实现不提供std::initializer_list
。如果Clang正在使用GCC的libstdc ++,并且您没有安装适当的新版本,那么就是这种情况:您至少需要4.4版本,但请注意修复libstdc ++中的错误需要a patch - 4.4 in为了使它在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
。如果没有看到代码的其余部分或其他诊断信息,就无法确定哪一个。