In template: no member named 'allocate' in 'std::allocator<char>'报错
时间: 2023-07-29 14:11:28 浏览: 237
无法解析的外部符号”private: char * __cdecl cv::String::allocate(unsigned __int64)” (?allocate@String@cv@@AEAA
这个错误通常是由于使用了错误的模板类型而导致的。在C++中,`std::allocator`是一个模板类,它用于动态分配内存。在使用`std::allocator`时,我们需要指定要分配的数据类型,例如:
```c++
std::vector<int, std::allocator<int>> vec;
```
在这个例子中,`std::vector`使用`std::allocator<int>`来分配`int`类型的内存。
如果你在使用`std::allocator`时出现了`no member named 'allocate' in 'std::allocator<char>'`的错误,很可能是因为你使用了错误的模板类型。例如,下面的代码就会导致这个错误:
```c++
std::vector<char, std::allocator<char>> vec;
vec.reserve(10);
```
在这个例子中,我们使用了`std::allocator<char>`来分配`char`类型的内存,但是`std::vector`的默认分配器已经是`std::allocator<char>`,因此我们不需要显式地指定分配器。如果你想使用`reserve()`函数来预分配内存,可以像下面这样写:
```c++
std::vector<char> vec;
vec.reserve(10);
```
这样就可以避免`no member named 'allocate' in 'std::allocator<char>'`的错误了。
阅读全文