2011-05-22 52 views
6

我得到一个“的memcpy并不在此范围内误差定义为”用下面的代码定义:“的memcpy”不在此范围

CommonSessionMessage::CommonSessionMessage(const char* data, int size) 
    : m_data(new char[size]) { 
    memcpy(m_data.get(), data, size); 
} 

我已经通过这个网站看上去和谷歌可能找不到解决方案可以解决我的问题。

任何援助将不胜感激。

谢谢。

+0

已包含cstdlib? – 2011-05-22 21:29:02

+0

@George:'memcpy'在''中。 – kennytm 2011-05-22 21:29:50

+0

嗯你是对的。我的错。 – 2011-05-22 21:31:50

回答

15

在代码文件的开头是否包含了string.h/cstring(或包含它的其他头文件)?

2
#include <cstring> 

CommonSessionMessage::CommonSessionMessage(const char* data, int size) 
: m_data(new char[size]) 
{ 
    std::memcpy(m_data, data, size); 
} 

看起来m_datachar*类型。如果是这样,那么它没有get()函数,并且m_data.get()在你的代码中是没有意义的。


另一种解决办法是使用std::copy为:

#include<algorithm> 

CommonSessionMessage::CommonSessionMessage(const char* data, int size) 
: m_data(new char[size]) 
{ 
    std::copy(data, data + size, m_data); 
} 

我宁愿第二溶液。阅读std::copy的文档。

+0

对不起,我正在使用boost :: scope_array。但让我试试看,我会尽快回复你。谢谢。 – czchlong 2011-05-22 22:02:58

+0

你怎么知道'm_data'是否有'get()'函数?我们不知道它的类型;我们只知道它可以转换为char *'。 – TonyK 2011-05-22 22:07:06

0

即使包含所有正确的路径,我也遇到了同样的问题(在头文件中)。原来我的文件名没有扩展名。将它从“array”重命名为“array.hpp”解决了我的问题。愚蠢的错误...容易修复。

(我运行Eclipse版本:朱诺服务发布1,建立ID:20120920-0800在Mac OS X 10.6.8)