Простая проблема определения шаблона C ++ - PullRequest
0 голосов
/ 29 октября 2010

Я новичок в C ++. Вот код:

template <class T> typename lw_slist {
    // .... some code
    private:     

        typedef struct _slist_cell {
            _slist_cell *next;
            T data;
        } slist_cell;

        lw_slist::slist_cell *root;
};

Дайте эту ошибку компиляции:

error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Почему?

Ответы [ 2 ]

7 голосов
/ 29 октября 2010

Это ошибка, потому что это вообще не какое-либо объявление.

Компилятор должен знать, хотите ли вы class, struct, enum, union или что-то еще. typename это не то ключевое слово для использования там.

Вы вероятно ищете это:

template<class T>
struct lw_slist {
};
1 голос
/ 29 октября 2010

Совершенно новый вопрос, совершенно новый ответ:

Я думаю, что вы захотите вот так:

template <class T>
class lw_slist {
    // .... some code
    private:     
        struct slist_cell {
            slist_cell *next;
            T data;
        };

        slist_cell *root;
};

Нет причин использовать typedef: C ++ создает классыи автоматически создает часть пространства имен.

Нет причин использовать lw_slist :: slist_cell, поскольку slist_cell уже находится в текущем пространстве имен.

Причина, по которой вы получили ошибку dependent name is not a typeв том, что внутри объявления шаблона C ++ не может определить, должен ли lw_slist<T>::slist_cell быть типом или переменной.Предполагается переменная с именем slist_cell, и вы должны использовать typename, чтобы сказать иначе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...