我有两个.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
答案 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