Полиморфизм Eclipse с использованием ошибки С++ 11 shared_ptr
Учитывая следующий пример кода:
#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>) '
потому что a shared_ptr<B>
. Это компилируется и запускается и выводится:
3
4
как ожидалось.
У индексатора и компилятора указан -std = С++ 11.
У компилятора также есть символ __GXX_EXPERIMENTAL_CXX0X__
.
Есть ли способ избавиться от этой ошибки и ее красных squiggles в Eclipse (желательно без изменения источника)?
Ответы
Ответ 1
Это было исправлено в более поздних версиях CDT (я просто попробовал).
Вы можете использовать ночную сборку CDT с помощью этого репозитория:
Перейдите в раздел Справка и введите url http://download.eclipse.org/tools/cdt/builds/kepler/nightly
Если вам не нравится использовать ночную сборку, вы должны хотя бы убедиться, что у вас есть последняя выпущенная версия (при этой записи это 8.1.1), используя http://download.eclipse.org/tools/cdt/releases/juno/
Моя полная настройка eclipse с С++ 11 находится здесь:
http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Ответ 2
Я рекомендую отключить плагин Catic для анализа статического кода в настройках, которые он, вероятно, еще не поддерживает С++ 11.