我得到在Eclipse中无效的参数错误,但我相信我的论点是好的。 建议的参数包含一个“?” 我想这可能表明这个问题,虽然我不知道如何解决它。
我已经做了我最好的复制我在这里看到的例子:
http://www.cplusplus.com/reference/clibrary/cstring/memset/
为了肯定的是,我收到ARGS权利。
#include <stdio.h>
#include <string.h>
void foo()
{
char str[] = "why oh why does my IDE give me errors when I know my args are good?";
memset(str, '-', 4);
puts(str);
}
Eclipse的给我上的memset线以下错误:
参数无效 '考生:void *的memset的(?无效*,INT)'
可能是什么造成的? 什么是达与“?” 作为第三个参数?
提前致谢!
PS:只注意到我收到类似的错误,当我尝试使用操作,如malloc的,释放calloc等。
在Eclipse:
- 右键单击该项目
- 点击属性
- 展开“C / C ++一般 ”通过单击箭头,(只需点击该项目本身不扩大子选项),在左边的树状视图项目
- 从子选项中选择“ 预处理器包括路径,宏等。”
- 点击“ 供应商 ”选项卡
- 勾选“CDT GCC内置编译器设置[共享]”的框。
编辑:
这部作品的原因是,有一堆默认的包括和定义,编译器默默地在幕后增加,当你编译。 这些指令得到日食抓住这些原本沉默的预处理指令,使其自身的索引器使用相同的设置
下面的方法解决了,我有同样的问题。 (上蚀4.2)
- 清理项目(
Project
- > Clean
) - 重新索引文件(
Project
- > C/C++ Index
- > Rebuild
) - 重建项目(
Project
- > Build All
)
我认为这是值得做你的Eclipse安装,不知何故。
采取独立的,该片段下GCC(G ++)4.7.1在Mac OS X 10.7.5用命令行编译:
g++ -O3 -g -Wall -Wextra -c ms.cpp
关于第三个参数唯一令人惊奇memset()
是它的类型size_t
,但头都应该声明,所以它不应该是一个问题。
如果您使用malloc()
等人,你将被包括<stdlib.h>
,当然。 也有空间来认为,你应该使用<cstdio>
, <cstring>
和<cstdlib>
但这不应该阻止你没有错误编译提供的代码。
如果你正在使用Visual Studio的工作,为size_t被定义为
typedef unsigned __int64 size_t;
在Eclipse CDT的早期版本,__int64没有定义。 >路径和符号 - - 您可以通过添加到C / C ++通用解决这个问题>符号
或者,你可以升级你的Eclipse CDT版本
我已经使用了BeagleBone发展第三方C ++库,我尝试一切可能的办法,包括它(如预处理器包括源文件夹,装配台包括库包括C ++编译器包括C编译器包括等等)。 Refreshen,重新索引,清洁和建造的每一个变化,我试图。 我甚至删除的项目,仅复制在.cpp和.h文件到一个新的项目。
我终于找到了问题我的设置和纠正它,如下所示。
右键单击项目>属性> C / C ++编译>工具链编辑>当前生成器:>选择CDT内部生成器
我使用的是G ++,供您参考。
我曾与Eclipse CDT的一个类似的问题。 但在我的情况下,事情是,我已经把using namespace std;
声明在以下几个头。 而在条件的某种组合,当我包括所有的这头中的Eclipse中有过这样的行为。
编译别人的代码时,我也有类似的问题,这个问题是代码风格。 他们定义了这样一些方法:
// ... Inside a class
static void
sleep( u32 ms );
我想这是GNU风格。 只是改变了声明
static void sleep( u32 ms );
删除的问题。
文章来源: Eclipse giving me Invalid arguments ' Candidates are: void * memset(void *, int, ?) ' though I know the args are good