【发布时间】:2015-09-02 23:13:28
【问题描述】:
我正在尝试编写我的类和结构实现文件。该类具有结构中的变量。我不断收到错误:
LinkedList.h:70:8:错误:“ListNode”未命名类型 ListNode* 头部;
LinkedList.h:71:8:错误:“ListNode”未命名类型 ListNode* 光标;
LinkedList.h 看起来像这样:
#ifndef CLASS_LINKEDLIST_H
#define CLASS_LINKEDLIST_H
// Header files
#include <iostream>
#include "ListNode.h"
using namespace std;
class LinkedList
{
public:
LinkedList( int maxSize = 10 );
LinkedList( const LinkedList& other );
~LinkedList();
private:
ListNode* head;
ListNode* cursor;
int capacity;
int size;
};
#endif // ifndef CLASS_LINKEDLIST
ListNode.h 是这样的结构:
#ifndef STRUCT_LISTNODE_H
#define STRUCT_LISTNODE_H
using namespace std;
struct ListNode
{
ListNode( int nodeData, ListNode* nextPtr);
int dataItem;
ListNode* next;
};
#endif // STRUCT_LISTNODE_H
ListNode.cpp 看起来像这样:
#ifndef STRUCT_LISTNODE_H
#define STRUCT_LISTNODE_H
#include "ListNode.h"
#include <iostream>
ListNode:: ListNode(int nodeData, ListNode* nextPtr)
{
dataItem = nodeData;
next = nextPtr;
}
#endif // STRUCT_LISTNODE_H
这里是 LinkedList.cpp 的顶部
#ifndef STRUCT_LISTNODE_H
#define STRUCT_LISTNODE_H
// header files
#include "LinkedList.h"
我不能更改 .h 文件,只能更改 .cpp 文件。我知道有一些简单的东西我忘记包括在内,但我似乎无法弄清楚。
提前感谢您的帮助。
【问题讨论】:
-
为什么LinkedList.cpp 有包含守卫?它是否包含在另一个文件中?
-
是的,从您的 CPP 文件中删除包含防护。包括守卫通常是写着
#ifndef filename_h的行。 -
这是作业吗,你得到了头文件?如果是这样,他们担心标题中有
using namespace std;...标题中的using namespace是个坏主意。 -
谢谢,我从 CPP 文件中删除了包含保护,它消除了错误。所以那些只应该放在 .h 文件上?
-
@jake415 是的,因为只有标题才会被其他文件包含在内。守卫只是确保文件不会被包含两次。通常,由于不需要 cpp,因此您不需要警卫。