用c++写了一份尾插法单向链表,设计了Node.h和LinkList.h,两个类头文件,和LinkList.cpp和main.cpp源程序。在Node.h和LinkList.h中使用了#ifndef、#define、#endif头文件保护,项目编译运行成功,但是报错:
//Node.h
#ifndef NODE.H
#define NODE.H
#include <iostream>
using namespace std;
//单项链表节点对象
class Node{
public:
int data;
Node *next;
};
#endif
//LinkList.h
#ifndef LINKLIST.H
#define LINKLIST.H
#include<iostream>
#include"Node.h"
using namespace std;
//单项尾插法链表
class LinkList{
public:
LinkList(){
head = new Node();
head->next = NULL;
head->data=0;
end = head;
}
Node *head; //头节点
Node *end; //尾节点
void create(int value);
int receive(int nob);
bool find(int value);
};
#endif
//LinkList.cpp
#include<iostream>
#include "Node.h"
#include "LinkList.h"
using namespace std;
void LinkList::create(int value){
Node *node = new Node();
node->data = value;
node->next = NULL;
this->end->next = node;
this->end = node;
this->head->data++;
}
int LinkList::receive(int nob){
Node *p = this->head;
for(int j = 0;j<=nob;j++){
p = p->next;
}
return p->data;
}
bool LinkList::find(int value){
if(this->head->data==0) return false;
Node *p = this->head->next;
while(p!=NULL){
if(p->data==value){
return true;
}
p = p->next;
}
return false;
}
//main.cpp
#include <iostream>
#include"Node.h"
#include"LinkList.h"
using namespace std;
int main(int argc, char** argv) {
LinkList temp;
temp.create(96);
temp.create(52);
cout<<temp.find(52)<<endl;
return 0;
}
报错信息:
1 13 C:\Users\y\Desktop\cpp\Node.h [Warning] extra tokens at end of #ifndef directive
2 13 C:\Users\y\Desktop\cpp\Node.h [Warning] missing whitespace after the macro name
询问了文心一言,说宏定义没有空格的原因,然而头文件保护没有跟着的数据,何来空格。
最初查看,你应该修改宏名,只是用大写字母和下划线:
你还可以使用这样保护整个文件:
另外,我没有理解你的
头文件保护没有跟着的数据
是什么意思,可以解释下你的意思吗