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

Eclipse CDT can not resolve method in template class

本文关键字:方法 CDT Eclipse      更新时间:2023-10-16

我对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();
}

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

为什么发生?

因为CDT C 解析器无法识别using A<T>::fB中声明一个满足呼叫的成员函数 const int* p = x.f()中的CC_6。您可以通过添加一个 const to 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 解析器,除非它不同意您的编译器)。