如何引用模板类中定义的typedef

时间:2013-09-18 13:27:29

标签: c++ templates typedef

我是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
};

现在我想在main.cpp中使用外部的LPOS类型:

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

我尝试使用“使用”,但这也没有带来任何影响。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:2)

MyList<T>::LPOS pos;:此处T没有任何意义。您需要使用实际类型实例化MyList

MyList<double>::LPOS pos;应该可以正常使用。

double就是一个示例:您需要将T更改为您需要的类型。

答案 1 :(得分:0)

你需要一些具体类型,例如MyList<int>::LPOS T testListMyList<int>::LPOS无效。问题是您需要正确的模板参数,因为MyList<double>::LPOS与{{1}}不同。找出你需要的东西,并使用正确的。