2

我是 C++ 模板的新手,我正为一些编译器投诉而苦苦挣扎。我在模板类中定义了一个类范围类型,并想从其他地方引用这个类型。我尝试了不同的方法来限定类型的名称,但我唯一实现的就是得到不同的错误消息。

这是我的类的定义mylist.h,一个经典的列表实现:

template<typename T> class MyList {

public:
    class ListElement; // forward declaration

    typedef ListElement* LPOS;  // the problematic typedef

    // helper class for list elements
    class ListElement {
        LPOS next;
        int content;

      public:
        ListElement(T);
        LPOS getNext();
        ... 
    };

    // the list itself

    MyList();
    ListElement* first;

    LPOS add(T);
    LPOS insert(T, LPOS);
    ... // more list functions
};

现在我想从外部使用 LPOS 类型main.cpp

include "mylist.h"
...

void testList (void) {

    LPOS pos;                // compiler error: expected ';' before pos
    MyList<T>::LPOS pos; // compiler error: expected initializer before pos
    MyList::LPOS pos;    // compiler error: expected ';' before pos

我尝试使用“使用”,但这也没有导致任何地方。任何帮助将不胜感激。

4

2 回答 2

2

MyList<T>::LPOS pos;: 这里T没有意义。您需要MyList使用真实类型进行实例化:

MyList<double>::LPOS pos;应该可以正常工作。

double此处是一个示例:您需要更改T为所需的类型。

于 2013-09-18T13:30:15.917 回答
0

您需要一些具体的类型,例如MyList<int>::LPOSasTtestList. 问题是您需要正确的模板参数,因为MyList<int>::LPOSMyList<double>::LPOS. 找出您需要的并使用正确的。

于 2013-09-18T13:30:41.833 回答