无法创建类型为unorderedLinkedList

时间:2019-07-16 03:48:06

标签: c++ undeclared-identifier

我有两个.h文件,基类为linkedListType和派生类unorderedLinkedList。由于某种原因,它不允许我从unorderedLinkedList类创建对象。我还在整个程序中使用模板。

#include <iostream>
#include "unorderedLinkedList.h"

using namespace std;

int main()
{
    unorderedLinkedList<int> list, subList;

    int num;

    cout << "Enter numbers ending with -999" << endl;
    cin >> num;
}
#pragma once
#define UNORDEREDLINKEDLIST_H
#ifndef UNORDEREDLINKEDLIST_H
#include "linkedList.h"
#include <iostream>
using namespace std;

//creates class type unorderedLinkedList
template <class Type>
class unorderedLinkedList : public linkedListType<Type>
{
public:
    bool search(const Type& searchItem) const;
    //function to determine wether searchItem is in the list
    void insertFirst(const Type& newItem);
};

#endif
#pragma once
#define LINKEDLISTTYPE_H
#ifndef LINKEDLISTTYPE_H
#include <iostream>
#include <cassert>
using namespace std;

template<class Type>
class linkedListType
{
public:
    void divideMid(linkedListType<Type>& sublist);
    // divide list
    const linkedListType<Type>& operator=(const linkedListType<type>&);
    // overload the assignment operator.
    void initializeList();
};

#endif

2 个答案:

答案 0 :(得分:1)

在两个头文件中,您的#define#ifndef语句的顺序错误。

在每个文件中,您都在定义保护值,然后检查是否定义了保护值,因此将跳过头文件的全部内容。

仅在尚未定义保护值时才需要定义:

#ifndef UNORDEREDLINKEDLIST_H
#define UNORDEREDLINKEDLIST_H
...
#endif
#ifndef LINKEDLISTTYPE_H
#define LINKEDLISTTYPE_H
...
#endif

答案 1 :(得分:0)

如上所述,您需要先检查是否定义了包含保护,然后再定义它,否则它将永远不会包含在其中。

此外,您应该使用#pragma一次(如果支持)或#ifndef #define防护。不必同时使用两者。

再次重申

-一次删除#pragma

-更改ifndef / define的顺序

    #ifndef UNORDEREDLINKEDLIST_H
    #define UNORDEREDLINKEDLIST_H
    ...
    #endif

    #ifndef LINKEDLISTTYPE_H
    #define LINKEDLISTTYPE_H
    ...
    #endif