Eri*_*c B 2 c++ eclipse polymorphism smart-pointers c++11
给出以下示例代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
Eclipse表示该行有错误
f(b);
Run Code Online (Sandbox Code Playgroud)
说Invalid arguments ' Candidates are: void f(std::shared_ptr<A>) '
因为shared_ptr<B>已经通过了.这编译并运行,并输出:
3
4
Run Code Online (Sandbox Code Playgroud)
正如所料.
索引器和编译器指定了-std = c ++ 11.
编译器还__GXX_EXPERIMENTAL_CXX0X__定义了符号.
有没有办法摆脱这个错误及其在Eclipse中的红色波形(最好不修改源代码)?
这已在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
| 归档时间: |
|
| 查看次数: |
2101 次 |
| 最近记录: |