web-dev-qa-db-ja.com

Eclipseが無効な引数を与える '候補は次のとおりです:void * memset(void *、int、?)'引数は適切であることはわかっています

Eclipseで無効な引数エラーが発生していますが、自分の引数は適切であると確信しています。提案された引数には「?」が含まれています私はそれを修正する方法がわかりませんが、これは問題を示していると思います。

私はここで見た例をコピーするために最善を尽くしました:
http://www.cplusplus.com/reference/clibrary/cstring/memset/

私が引数を正しく取得していることを確認するために。

#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(void *、int、?)'

何が原因でしょうか?そして、それはどうなっていますか? 3番目の引数として?

前もって感謝します!

PS:malloc、callocなどの操作を使用しようとすると、同様のエラーが発生することに気づきました。

27
djc6535

Eclipseの場合:

  • プロジェクトを右クリック
  • プロパティをクリック
  • 矢印をクリックして、左側のツリービューで項目を展開 "C/C++一般"します(項目をクリックするだけです)それ自体はサブオプションを展開しません)
  • サブオプションから "プリプロセッサインクルードパス、マクロなど]を選択します"
  • "Providers"タブをクリックします
  • "CDT GCC Built-in Compiler Settings [Shared]"の横のボックスをオンにします。

編集:

これが機能する理由は、デフォルトのインクルードがたくさんあり、コンパイル時にコンパイラーがバックグラウンドで静かに追加することを定義しているためです。これらの指示により、Eclipseはこれらのサイレントプリプロセッサーディレクティブを取得して、独自のインデクサーが同じ設定を使用するようにします

18
Catskul

次の方法は、私が抱えていたのと同じ問題を解決します。 (Eclipse 4.2)

  • プロジェクトをクリーンアップします(Project-> Clean
  • ファイルのインデックスを再作成する(Project-> C/C++ Index-> Rebuild
  • プロジェクトを再構築します(Project-> Build All
3
Ramesh-X

Visual Studioを使用している場合、size_tは次のように定義されます。

typedef unsigned __int64    size_t;

Eclipse CDTの以前のバージョンでは、__ int64は定義されていませんでした。この問題は、C/C++ General-> Paths and Symbols-> Symbolsに追加することで修正できます。

  • シンボル:__int64
  • 値:long long

または、Eclipse CDTバージョンをアップグレードできます

1
JACH

どういうわけか、それはあなたのEclipseセットアップと関係があると思います。

スタンドアロンで使用すると、そのフラグメントはMac OS X 10.7.5のGCC(G ++)4.7.1でコマンドラインを使用してコンパイルされます。

_g++ -O3 -g -Wall -Wextra -c ms.cpp
_

memset()の3番目の引数について驚くべきことは、それが_size_t_型であることですが、ヘッダーはそれを宣言することになっているため、問題にはなりません。

malloc()などを使用している場合は、もちろん_<stdlib.h>_を含めます。 _<cstdio>_、_<cstring>_、および_<cstdlib>_を使用する必要があると主張する余地もありますが、それによって、提示されたコードがエラーなしでコンパイルされるのを妨げるべきではありません。

1

誰かのコードをコンパイルするときに同様の問題があり、問題はコードスタイルでした。彼らはこのようにいくつかのメソッドを定義しました:

// ... Inside a class

static void
sleep( u32 ms );

これはGNUスタイルです。宣言を次のように変更するだけです。

static void sleep( u32 ms );

問題を削除しました。

0
wilsan

私はBeagleBone開発にサードパーティのC++ライブラリを使用しており、可能な限りの方法でそれを含めようとしました(プリプロセッサーインクルード、ソースフォルダー、アセンブリインクルード、ライブラリインクルード、C++コンパイラインクルード、Cコンパイラインクルードなど)。私が試みたすべての変更に対して、更新、再インデックス、クリーン、ビルドを行いました。プロジェクトを削除して、.cppファイルと.hファイルのみを新しいプロジェクトにコピーすることさえしました。

ようやくセットアップに問題が見つかり、次のように修正しました。

プロジェクトを右クリック>プロパティ> C/C++ビルド>ツールチェーンエディター>現在のビルダー:>選択CDT内部ビルダー

参考までに、g ++を使用しています。

0
Raam Kumar

Eclipse CDTでも同様の問題がありました。しかし、私の場合、いくつかのヘッダーにusing namespace std;ステートメントを挿入したことが問題でした。そして、いくつかの条件の組み合わせで、このヘッダーをすべて含めたところ、Eclipseはそのような動作をしました。

0
Serge Roussak