日食给我的参数无效“考生:void *的memset的(?无效*,INT)”虽然我知道ARG游戏好(

2019-07-01 20:35发布

我得到在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等。

Answer 1:

在Eclipse:

  • 右键单击该项目
  • 点击属性
  • 展开“C / C ++一般通过单击箭头,(只需点击该项目本身不扩大子选项),在左边的树状视图项目
  • 从子选项中选择预处理器包括路径,宏等。”
  • 点击供应商选项卡
  • 勾选“CDT GCC内置编译器设置[共享]”的框。

编辑:

这部作品的原因是,有一堆默认的包括和定义,编译器默默地在幕后增加,当你编译。 这些指令得到日食抓住这些原本沉默的预处理指令,使其自身的索引器使用相同的设置



Answer 2:

下面的方法解决了,我有同样的问题。 (上蚀4.2)

  • 清理项目( Project - > Clean
  • 重新索引文件( Project - > C/C++ Index - > Rebuild
  • 重建项目( Project - > Build All


Answer 3:

我认为这是值得做你的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>但这不应该阻止你没有错误编译提供的代码。



Answer 4:

如果你正在使用Visual Studio的工作,为size_t被定义为

typedef unsigned __int64    size_t;

在Eclipse CDT的早期版本,__int64没有定义。 >路径和符号 - - 您可以通过添加到C / C ++通用解决这个问题>符号

  • 符号:__int64
  • 价值:很久很久

或者,你可以升级你的Eclipse CDT版本



Answer 5:

我已经使用了BeagleBone发展第三方C ++库,我尝试一切可能的办法,包括它(如预处理器包括源文件夹,装配台包括库包括C ++编译器包括C编译器包括等等)。 Refreshen,重新索引,清洁和建造的每一个变化,我试图。 我甚至删除的项目,仅复制在.cpp和.h文件到一个新的项目。

我终于找到了问题我的设置和纠正它,如下所示。

右键单击项目>属性> C / C ++编译>工具链编辑>当前生成器:>选择CDT内部生成器

我使用的是G ++,供您参考。



Answer 6:

我曾与Eclipse CDT的一个类似的问题。 但在我的情况下,事情是,我已经把using namespace std; 声明在以下几个头。 而在条件的某种组合,当我包括所有的这头中的Eclipse中有过这样的行为。



Answer 7:

编译别人的代码时,我也有类似的问题,这个问题是代码风格。 他们定义了这样一些方法:

// ... 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