error: no matching function for call to 'operator new(sizetype, long long unsigned int, long long unsigned int*&)'
new(sizeof(T), tmp) T{std::move(buffer[i])};
我收到此错误,导致我认为sizeof(T)
被解释为sizetype, T
。为什么会发生这种情况,我该如何解决?
tmp
属于T*
类型,新运算符由#include <new>
定义,我不会在任何地方定义逗号运算符。当我用Google搜索这个错误时,我发现的唯一类似事件是重新定义新运算符的调试模式,但事实并非如此。
答案 0 :(得分:4)
您似乎正在尝试编写新的贴图,但是您传递的参数太多了。当通过operator new
表达式调用new
时,第一个参数始终设置为新建类型的大小。因此,您的代码转换为对
operator new(size_t, size_t, T*)
语言提供的第一个size_t
为sizeof(T)
,第二个是您的表达式提供的sizeof(T)
,第三个是指针。
placement new的正常语法是:
new (tmp) T{std::move(buffer[i])};