Ошибка времени компиляции: ожидаемый конструктор, деструктор или преобразование - PullRequest
1 голос
/ 29 августа 2011

Мне нужна помощь

выглядит ли этот фрагмент кода правильным?

#include "programass.h"

#include <cstdlib>
#include <iostream>
#include <string>
#include "Student.h"
using namespace std;

template<class emptyValue>

struct DoublyLinkedNode
{
    emptyValue data;
    DoublyLinkedNode *prev, *next;
};
typedef DoublyLinkedNode<int> numListNode;
DoublyLinkedNode *listHead = NULL;
DoublyLinkedNode *listTail = NULL;

Я получаю сообщение об "ожидаемом конструкторе, деструкторе или преобразовании до" * "" в отладчике?на последних двух строчках что я сделал не так?:(

Ответы [ 3 ]

3 голосов
/ 29 августа 2011

Вы сделали

typedef DoublyLinkedNode<int> numListNode;

но в следующих двух строках

DoublyLinkedNode *listHead = NULL;
DoublyLinkedNode *listTail = NULL;

вы забыли использовать этот новый тип numListNode. Измените их на

numListNode *listHead = NULL;
numListNode *listTail = NULL;

Поскольку вы не можете использовать шаблонный класс без аргумента шаблона, и вы попытались сделать DoublyLinkedNode *listHead, когда это должно было быть DoublyLinkedNode<something> *listHead. Поэтому, если вы используете typedef, который задает аргумент шаблона (как int), он работает.

1 голос
/ 29 августа 2011

Сет прав, но если я правильно понимаю, вы пытаетесь создать общий тип данных и, следовательно, хотите, чтобы заголовок и хвост списка также были шаблонными. Для этого вам понадобится структура контейнера, которая также будет содержать их:

template < typename emptyValue >
struct List 
{
    struct DoublyLinkedNode
    {
        emptyValue data;
        DoublyLinkedNode *prev, *next;
    };
    DoublyLinkedNode *head;
    DoublyLinkedNode *tail;

    ....
}

typedef List<int> numList;
1 голос
/ 29 августа 2011

Я уверен, что вы хотели использовать numListNode вместо DoublyLinkedNode при объявлении двух указателей.

numListNode* listHead = NULL;
numListNode* listTail = NULL;

В примечании к сторонам я рекомендую удалить пустую строку между template <class emptyValue> и struct DoublyLinkedNode,и используя стиль Type* ptr; вместо Type *ptr;, так будет лучше.

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