Eclipse CDT无法解析模板类中的方法

时间:2014-01-23 04:48:18

标签: c++ eclipse eclipse-cdt

Eclipse CDT索引器/代码分析器存在问题。当我在编辑器中编写以下代码时,它会在const int* p = x.f(); - Invalid arguments Candidates are: int * f()上显示错误。因此,由于某种原因,它无法识别B类中的方法const T* f() const

template<typename T>
class A {
public:
    const T* f() const { return 0; }
};

template<typename T>
class B : A<T> {
public:
    using A<T>::f;
    T* f() { return 0; }
};

void main() {
    const B<int> x;
    const int* p = x.f();
}

任何想法为什么会发生以及如何解决问题?

1 个答案:

答案 0 :(得分:1)

为什么会这样?

因为CDT C ++解析器无法识别using A<T>::f 在类B中声明满足调用的成员函数 const int* p = x.f()中的main()。您可以通过添加一个来验证这一点 const限定符为T* B::f()。这满足了解析器(但是失败了 成员函数的目的)。

如何解决问题?

嗯,在基类中使用const T* f() const似乎很奇怪 和派生类中的T* f()。除非有一些引人注目的 原因是,您可以在AB(可能是A)中声明两个成员函数。或者,但没有吸引力,你可以:

  • 为他们指定不同的名称,可能是ff_const,或
  • 删除using A<T>::f;并将const int* p = x.();替换为 明确限定的电话const int* p = x.A<int>::f();

您还可以忽略问题,因为解析器的混淆不会 在IDE中成功停止程序构建。 (很高兴拥有实时C ++ 解析器,除非它与您的编译器不一致)。