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>::LPOSなど、具体的な型が必要です。問題は、 と同じではないため、正しいテンプレート パラメータが必要なことです。必要なものを見つけて、正しいものを使用してください。TtestListMyList<int>::LPOSMyList<double>::LPOS

于 2013-09-18T13:30:41.833 に答える