构造函数不允许返回类型(通用链接列表)

时间:2016-10-09 10:15:24

标签: c++ templates linked-list

我正在尝试使用模板在C ++中创建一个通用链接列表。但我得到这个错误'GenericNode :: {ctor}':构造函数不允许返回类型,通过它我不可能知道我做错了什么? PS。我在Stack Overflow上也经历了其他帖子,其中说错误是由于课程定义后缺少分号,但我认为我没有“缺少半冒号”的情况。有什么帮助吗?

代码:

GenericLinkedList.h:

#pragma once

template <typename Datatype>
class GenericNode {
    Datatype T;
    GenericNode *next;

public:

    GenericNode() {}

    GenericNode(Datatype T);

};

template<typename Datatype>
void GenericNode<Datatype>::GenericNode(Datatype data) {
    T = data;
}

template <typename Datatype>
class GenericLinkedList {

    GenericNode *Data;

public:

    GenericLinkedList() {
        Data = NULL;
    }

    int isEmpty();
    void addDataAtFront(Datatype data);
    void addDataAtEnd(Datatype data);
    void print();

};

template <typename Datatype>
int GenericLinkedList<Datatype>::isEmpty() {
    return Data == NULL;
}

template <typename Datatype>
void GenericLinkedList<Datatype>::addDataAtFront(Datatype data) {
    GenericNode *newNode, *tmpNode;
    newNode = new Node;
    newNode->T = data;
    newNode->next = NULL;

    if (Data == NULL) {
        Data = newNode;
    }

    else {
        tmpNode = Data;
        Data = newNode;
        Data->next = tmpNode;

    }

}

template <typename Datatype>
void GenericLinkedList<Datatype>::addDataAtEnd(Datatype data) {
    GenericNode *newNode, *tmpNode;
    newNode = new Node;
    newNode->T = data;
    newNode->next = NULL;

    if (Data == NULL) {
        Data = newNode;
    }

    else {
        tmpNode = Data;
        while (tmpNode->next != NULL) {
            tmpNode = tmpNode->next;
        }

        tmpNode->next = newNode;

    }

}

template <typename Datatype>
void GenericLinkedList<Datatype>::print() {
    GenericNode tmpNode;
    tmpNode = Data;
    for (tmpNode;tmpNode != NULL;tmpNode = tmpNode->next) {
        cout << tmpNode->T << " ";
    }
}

.cpp:

#include <iostream>
#include <conio.h>
#include "GenericLinkedList.h"
using namespace std;

int main() {

    GenericLinkedList<int> T;
    T.addDataAtFront(5);
    T.addDataAtEnd(6);
    T.addDataAtFront(4);
    T.print();

    _getch();
}

2 个答案:

答案 0 :(得分:1)

template<typename Datatype>
void GenericNode<Datatype>::GenericNode(Datatype data) {
    T = data;
}

你写的返回类型为void。这是一个构造函数。

答案 1 :(得分:1)

void GenericNode :: GenericNode(数据类型数据) remove void是一个构造函数。构造函数不返回,也没有返回类型。