我一直在对此进行一些研究,并且在stackoverflow上发现了一些类似的问题,这些问题涉及类型的可见性,但这似乎并不是一个完全相同的问题(或者至少是我经过几个小时的研究后才想到的问题)。 )。

让我们关注:

问题

C++编译器报告“abc.cpp:132:错误:'*'标记之前的预期构造函数,析构函数或类型转换”

报告问题的代码

template <class C, class I> ABC<C, I>::Node * ABC<C, I>::buscaTreuIRetornaMinim(Node **node) {
    if (*node == NULL) return NULL;
    if ((*node)->fesq != NULL) return buscaTreuIRetornaMinim(&(*node)->fesq);
    Node *q = *node;
    *node = *node->fdre;
    return q;
}

在第一行(函数头)上报告该问题。到目前为止,我知道问题在于指定“Node *”时,但是它已经完全限定,所以我看不出问题出在哪里。

其余的类定义
class ABC {
public:
    ABC(void) : arrel(NULL), numelements(0), altura(0) { }
    void inserir(C pclau, I pinfo);
    void inordre(void);
    I consultar(C pclau);
    C minim(void);
    C maxim(void);
    void esborrar(C pclau);

private:
    class Node {
    public:
        C clau;
        I info;
        Node *fesq;
        Node *fdre;

        Node(C pclau, I pinfo, Node *pfesq = NULL, Node *pfdre = NULL) : clau(pclau), info(pinfo), fesq(pfesq), fdre(pfdre) { }
    };

    Node *arrel;
    Node *actual;
    int numelements;
    int altura;

    void inserir(C pclau, I pinfo, Node **node);
    void inordre(Node **node);
    I consultar(C pclau, Node **node);
    C minim(Node **node);
    C maxim(Node **node);
    void esborrar(C pclau, Node **node);
    Node * buscaTreuIRetornaMinim(Node **node);
};

另一方面,我可以确保其余功能均正常运行。到目前为止,这是我唯一处理过的问题。

任何提示将不胜感激。在此先感谢您的时间。

最佳答案

包含模板参数的合格类型名称必须以关键字typename为前缀:typename ABC<C, I>::Node *
您可以了解有关此typename关键字here必要性的更多信息。

10-01 08:36
查看更多