2

次のサンプル コードを考えます。

#include <iostream>
#include <memory>
using namespace std;

struct A {
public:
    A(int aa) : a(aa) {}
    int a;
    virtual ~A() {}
};
struct B : A {
public:
    B(int aa, int bb) : A(aa), b(bb) {}
    int b;
};

void f(shared_ptr<A> a){
    shared_ptr<B> b = dynamic_pointer_cast<B>(a);
    if (b) {
        cout << b->b << endl;
    } else {
        cout << a->a << endl;
    }
}

int main() {
    auto a = make_shared<A>(3);
    auto b = make_shared<B>(7, 4);
    f(a);
    f(b);
    return 0;
}

Eclipse は、行にエラーがあることを示します

f(b);

aが渡されたInvalid arguments ' Candidates are: void f(std::shared_ptr<A>) '
ので言っています。shared_ptr<B>これをコンパイルして実行すると、次の出力が得られます。

3
4

予想通り。

インデクサーとコンパイラーには -std=c++11 が指定されています。
コンパイラにはシンボルも__GXX_EXPERIMENTAL_CXX0X__定義されています。

Eclipse でこのエラーとその赤い波線を取り除く方法はありますか (できればソースを変更せずに) はありますか?

4

2 に答える 2

5

おそらく C++11 をまだサポートしていない設定で、静的コード分析プラグイン Codan を無効にすることをお勧めします。

于 2012-12-16T20:52:24.630 に答える
5

これは、CDT の新しいバージョンで修正されています (試してみました)。

このリポジトリを使用して CDT のナイトリー ビルドを使用できます: ヘルプに移動し、URL http://download.eclipse.org/tools/cdt/builds/kepler/nightlyを入力します。

ナイトビルドを使用したくない場合は、少なくともhttp://download.eclipse.org/tools/cdt/を使用して、最新のリリース バージョン (この記事の執筆時点では 8.1.1) を使用していることを確認する必要があります。リリース/ジュノ/

C ++ 11を使用したEclipseの完全なセットアップは、 http ://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-buildsにあります。

于 2012-12-17T22:57:53.583 に答える