私は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ミリ秒かかりました)
私はこの質問が古いことを知っていますが、私はこの正確な問題を抱えていて、インデックスを再構築するだけでそれを解決できたことを言及する価値があると思います:プロジェクトを右クリックして、「インデックス」、「再構築」。インデックスを再構築したとのことですが、役に立ちませんでした。重要なのは、「CDT GCC組み込みコンパイラ設定」で指定されたコンパイラのコマンドラインに-std=c++11
を追加した後、これを行ったことです。これは、プロジェクトのプロパティを開いて「C/C++一般」に移動すると見つかります。 「プリプロセッサインクルードパス、マクロなど」、「プロバイダー」タブ。私が正しく理解していれば、GCCバージョン6以降ではデフォルトでC++ 14になっているため、これを行う必要はありません。私はGCC5.4を自分で使用しています。
それでも問題が解決しない場合は、問題をデバッグするための最善の方法は、おそらくcstdint
の宣言を開くことです(インクルードファイル自体-したがって、#include
内のcstdint
を右クリックします。ディレクティブを選択し、「opendeclaration」を選択します)-これにより、インクルードされたファイルが表示され、プリプロセッサマクロ(#ifdef
など)によってセクションが除外されている場合はセクションがグレー表示されます。 uint32_t
が定義されていると見なされない理由がすぐにわかる場合があります。私の場合、__cplusplus
マクロの値が不適切だったため、上記のようにコンパイラのコマンドラインに-std=c++11
を追加することになりました-しかしインデックスを再構築する必要がありました問題が完全に解決される前に。
[プロジェクト]> [プロパティ]> [プリプロセッサインクルード]> [プロバイダー]でCDT GCC組み込みコンパイラ設定を有効にしてみてください。
-std=c++11
を追加した後、次のようにします。
C/C++一般->パスとシンボル->シンボル-> GNU C++
左側のAdd
をクリックし、__GXX_EXPERIMENTAL_CXX0X__
(2つのアンダースコアを追加して追加するようにしてください)をName
に貼り付け、Value
を空白のままにします。