[英]Eclipse polymorphism using C++11 shared_ptr error
給出以下示例代碼:
#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>) '
因為已經傳遞了shared_ptr<B>
。 這編譯並運行,並輸出:
3
4
正如所料。
索引器和編譯器指定了-std = c ++ 11。
編譯器還定義了符號__GXX_EXPERIMENTAL_CXX0X__
。
有沒有辦法擺脫這個錯誤及其在Eclipse中的紅色波形(最好不修改源代碼)?
我建議您在可能不支持C ++ 11的設置中禁用靜態代碼分析插件Codan。
這已在CDT的后續版本中修復(我剛剛嘗試過)。
您可以使用此存儲庫使用每晚構建的CDT:轉到幫助,然后輸入URL http://download.eclipse.org/tools/cdt/builds/kepler/nightly
如果你不想使用一個夜間版本,你應該至少確保你有最新發布的版本(在撰寫本文時它是8.1.1),使用http://download.eclipse.org/tools/cdt/發布/朱諾/
我在這里找到了完整的使用C ++ 11進行eclipse的設置: http : //scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.