【问题标题】:No matching function for call to operator new调用 operator new 没有匹配的函数
【发布时间】:2010-07-01 10:05:17
【问题描述】:

我正在尝试从我在 Lua 中使用的库中包装一个类。具体来说,我正在尝试从 SFML 包装颜色类。颜色类的完整源代码可见herehere

这是我失败的功能。

int SFColor_new(lua_State* L)
{
    // omitting part where I set r, g, b, and a
    new (lua_newuserdata(L, sizeof(Color))) Color(r, g, b, a); // Line 47
    luaL_getmetatable(L, LuaInfo<Color>::myMetaTableName);
    lua_setmetatable(L, -2);
    return 1;
}

这就是错误

LuaSFMLColor.cpp: In function ‘int ag::SFColor_new(lua_State*)’:
LuaSFMLColor.cpp:47: error: no matching function for call to ‘operator new(unsigned int, void*)’
<built-in>:0: note: candidates are: void* operator new(unsigned int)
make: *** [game] Error 1

我在其他几个地方做了类似的事情而没有遇到这个错误,所以我不确定是什么原因造成的。查看 Color 的源代码,我没有看到任何奇怪或不寻常的东西,而且我已经没有什么想法了。我也尝试过使用默认构造函数(即没有参数),然后只设置值,但这也没有任何好处。

【问题讨论】:

  • 当时我并不知道。 :P

标签: c++ new-operator


【解决方案1】:

要使用new 的标准放置形式,您必须#include &lt;new&gt;

您使用的new 形式需要声明void* operator new(std::size_t, void*) throw();

您不必#include &lt;new&gt; 使用非展示位置new

【讨论】:

  • +1。我从来不知道。也许很多 STL 头文件都使用placement new(出于相当明显的原因),而我自己从来不必手动#include 它,但是如果您有一个文件没有,比如vector,那么您可能需要手动包含它。
  • 做到了。在发布此消息之前,我也从未意识到这一点。它必须埋在我一直在使用的其他一些标题中,而我却不知道。谢谢。 :) 你每天学习新的东西。 (双关语)
  • 我最近允许clang-format 对我的包含进行排序并弹出此错误,因为系统包含曾经是第一个。谢谢你的知识。
  • 添加了增强请求to Clangto GCC,以便在使用placement new 和缺少#include &lt;new&gt; 时提供更好的错误消息。类似于:注意:使用placement new 需要#include .
猜你喜欢
  • 1970-01-01
  • 2021-08-31
  • 2017-10-16
  • 1970-01-01
  • 2021-09-21
  • 2016-11-23
  • 2016-08-08
  • 2014-03-12
  • 2015-03-17
相关资源
最近更新 更多