您的代码示例不完整。如果你能提供一个完整的例子,那将会很有用。编写的代码的问题是您丢失了
#include <initializer_list>
#include <vector>
#include <iostream>
...并且initializer_list
在 namespace 中std
,因此您的构造函数声明中也缺少 a 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
因此,要么您错过了问题的第一个诊断,要么问题是您已经声明了在您的问题中省略的代码中命名的其他(非)类型,那就是 hide 。如果不查看其余代码或其余诊断信息,则无法判断是哪一个。template
initializer_list
std::initializer_list