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);

Invalid arguments ' Candidates are: void f(std::shared_ptr<A>) '
因为ashared_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 回答