web-dev-qa-db-ja.com

タイプ「uint32_t」を解決できませんでした

私はEclipse(3.8.1)CDTでC++プログラムに取り組んでいます。 Debian 8でgccコンパイラを使用しています。C++で記述されたopendnp3というオープンソースライブラリも使用しています。これは、いくつかのメソッド呼び出しとコンストラクタのパラメータであるため、解決するにはint32_tが必要です。

Opendnpオブジェクトでは、intellisenseはリストしません

__uint32_tただし、解決します。

タイプは<cstdint>で定義されます(<cstdint>は問題なく解決されます)。宣言を開くと、そこに「using ::uint32_t;」がはっきりと表示されます。

検索では、「C/C++ビルド->設定->ツール設定-> GCC C++コンパイラ」の下の「すべてのオプション」に-std=c++11を追加し、プロジェクトインデックスを再構築してEclipseを再起動しました。 、しかしそれでも解決しません。

これまでのコードは次のとおりです。問題の診断に役立つように単純なHelloWorldプロジェクトに編集

#include <iostream>
#include <cstdint> //has uint32_t defined
using namespace std;

int main() {
    __uint32_t t = 0;  //resolves just fine
    uint32_t i = 0; //Type could not be resolved
    auto x = "123"; //C++ 11 working
    cout << "Foo!" << endl; // prints Foo!
    return 0;
}

ビルド試行後のCDTコンソール:

23:10:52 ****構成のインクリメンタルビルドプロジェクトFOOのデバッグ**** make all make: 'all'に対して何も実行されません。

23:10:52ビルドが完了しました(133ミリ秒かかりました)

6
ErikJL

私はこの質問が古いことを知っていますが、私はこの正確な問題を抱えていて、インデックスを再構築するだけでそれを解決できたことを言及する価値があると思います:プロジェクトを右クリックして、「インデックス」、「再構築」。インデックスを再構築したとのことですが、役に立ちませんでした。重要なのは、「CDT GCC組み込みコンパイラ設定」で指定されたコンパイラのコマンドラインに-std=c++11を追加した後、これを行ったことです。これは、プロジェクトのプロパティを開いて「C/C++一般」に移動すると見つかります。 「プリプロセッサインクルードパス、マクロなど」、「プロバイダー」タブ。私が正しく理解していれば、GCCバージョン6以降ではデフォルトでC++ 14になっているため、これを行う必要はありません。私はGCC5.4を自分で使用しています。

それでも問題が解決しない場合は、問題をデバッグするための最善の方法は、おそらくcstdintの宣言を開くことです(インクルードファイル自体-したがって、#include内のcstdintを右クリックします。ディレクティブを選択し、「opendeclaration」を選択します)-これにより、インクルードされたファイルが表示され、プリプロセッサマクロ(#ifdefなど)によってセクションが除外されている場合はセクションがグレー表示されます。 uint32_tが定義されていると見なされない理由がすぐにわかる場合があります。私の場合、__cplusplusマクロの値が不適切だったため、上記のようにコンパイラのコマンドラインに-std=c++11を追加することになりました-しかしインデックスを再構築する必要がありました問題が完全に解決される前に。

5
davmac

[プロジェクト]> [プロパティ]> [プリプロセッサインクルード]> [プロバイダー]でCDT GCC組み込みコンパイラ設定を有効にしてみてください。

2
Laurenz

-std=c++11を追加した後、次のようにします。

C/C++一般->パスとシンボル->シンボル-> GNU C++

左側のAddをクリックし、__GXX_EXPERIMENTAL_CXX0X__(2つのアンダースコアを追加して追加するようにしてください)をNameに貼り付け、Valueを空白のままにします。

0
Sookhee Park