Dobra działa w bloku, jeśli chodzi o domyślne konstruktory klasy wewnętrznej. W tym zadaniu muszę zrobić stos wykorzystanie linkowanej listy, dostałem funkcje, które mają, mam tylko mieć problemy z prawidłowym ustawieniem domyślnego konstruktora dla wewnętrznej klasy stacknode przynajmniej właśnie jest kompilator.

class StackNode { // this is given in the assignment its not the full .h
    public:
        StackNode(const DataType& nodeData, StackNode* nextPtr)
        {
            dataItem = nodeData;
            next = nextPtr;
        }

        DataType dataItem;
        StackNode* next;
    };

    StackNode* top;
};

// here is my default constructor for the class
template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)// <--this part is given inside is what i have done.
{
    top = NULL;
    StackNode::StackNode(const DataType x = NULL; StackNode * y = nullptr)
    {
        this->dataItem = x;
        this->next = y;
    }
//if i remove this i get error C2512 no appropriate default constructor for the StackNode<DataType>::StackNode
}

Nie znalazłem jeszcze wątku, żeby mi pomógł, więc opublikowałem to w nadziei na odkrywanie tego, czego brakuje.

Aktualizacja 1 - Błąd w wyjściu

(file dest)\StackLinked.cpp(11,23): error C2760: syntax error: unexpected token 'const', expected ')'
test6.cpp
(file dest)\StackLinked.cpp(11,23): error C2760: syntax error: unexpected token 'const', expected ')'

Jest to błąd podany, gdy próbuję zbudować mój kod

0
Ryan West 6 październik 2020, 01:55

1 odpowiedź

Najlepsza odpowiedź

Próbujesz zdefiniować korpus konstruktora StackNode wewnątrz definicję ciała StackLinked konstruktora. To nie zadziała. Muszą być określone oddzielnie. Ale masz już definicję konstruktora StackNode w deklaracji klasy {x3}}, więc nie ma potrzeby zdefiniowania drugiego ciała dla tego konstruktora.

template <typename DataType>
class StackLinked
{
private:
    class StackNode {
    public:
        StackNode(const DataType& nodeData, StackNode* nextPtr)
        {
            dataItem = nodeData;
            next = nextPtr;
        }

        DataType dataItem;
        StackNode* next;
    };

    StackNode* top;

public:
    StackLinked(int maxNumber);
};

...

template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)
{
    top = NULL;
}

W przeciwnym razie nie rób definicji konstruktora StackNode, tak jak nie jesteś dla konstruktora StackLinked:

template <typename DataType>
class StackLinked
{
private:
    class StackNode {
    public:
        StackNode(const DataType& nodeData, StackNode* nextPtr);

        DataType dataItem;
        StackNode* next;
    };

    StackNode* top;

public:
    StackLinked(int maxNumber);
};

...

template <typename DataType>
StackLinked<DataType>::StackLinked(int maxNumber)
{
    top = NULL;
}

template <typename DataType>
StackLinked<DataType>::StackNode::StackNode(const DataType& nodeData, StackNode* nextPtr)
{
    dataItem = nodeData;
    next = nextPtr;
}
0
Remy Lebeau 5 październik 2020, 23:13