我的代码:
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS
#include "c:\Users\1\documents\visual studio 2015\std_lib_facilities.h"
int main()
{
vector<int> v = { 5, 7, 9, 4, 6, 8 };
return 0;
}
无法使用此错误进行编译:
Severity Code Description Project File Line Suppression State Detail Description
Error (active) no instance of constructor "Vector<T>::Vector [with T=int]" matches the argument list ConsoleApplication1 c:\Users\1\Documents\Visual Studio 2015\Projects\ConsoleApplication1\Source.cpp 6 argument types are: (int, int, int, int, int, int)
我该如何解决这个问题?
答案 0 :(得分:2)
您似乎使用了错误版本的std_lib_facilities.h。std_lib_facilities.h中的Vector
没有initializer_list
构造函数。所以你不能用这个版本的标题做到这一点。
// trivially range-checked vector (no iterator checking):
template< class T> struct Vector : public std::vector<T> {
typedef typename std::vector<T>::size_type size_type;
Vector() { }
explicit Vector(size_type n) :std::vector<T>(n) {}
Vector(size_type n, const T& v) :std::vector<T>(n,v) {}
template <class I>
Vector(I first, I last) :std::vector<T>(first,last) {}
T& operator[](unsigned int i) // rather than return at(i);
{
if (i<0||this->size()<=i) throw Range_error(i);
return std::vector<T>::operator[](i);
}
const T& operator[](unsigned int i) const
{
if (i<0||this->size()<=i) throw Range_error(i);
return std::vector<T>::operator[](i);
}
};
// disgusting macro hack to get a range checked vector:
#define vector Vector
答案 1 :(得分:2)
您使用的是错误版本的Stroustrup标头。您使用的那个属于第一版PPP,使用here中的新版本,代码工作正常。
然后你也可以摆脱那个遗产修复
#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS