创建头文件和实现文件时出现问题

Problems creating a header file and implementation files

本文关键字:文件 问题 实现 创建      更新时间:2023-10-16

对于此作业,我们需要有一个头文件、一个实现文件和一个主文件。我已经成功地创建了一个程序,只使用一个cpp文件,当我尝试将其分成单独的文件时,我的问题出现了。

#include <iostream>
#include <string>
#include <cstdlib>
#include <iomanip>
#include <stdlib.h>
#include <time.h>
using namespace std;
struct card
{
int cardvalue;
card *next;
};
card *start=NULL,*ptr,*temp;
void shuffle(int number);
void displayDeck();
void drawCard();
void deconDeck();
int main()
{
shuffle(1);
displayDeck();
drawCard();
displayDeck();
shuffle(2);
displayDeck();
drawCard();
displayDeck();

return 0;
}
void shuffle(int number)
{
deconDeck();
srand(time(NULL));
int num1=0,t,x,numcards;
numcards=(number*52)+1; 
int prevdrawnnum[numcards];
for(x=0; x<numcards; x++)
{
prevdrawnnum[x]=0;
}

for(t=0; t<numcards; t++)
{
num1=rand()%numcards;
if(prevdrawnnum[num1]==1){
while(prevdrawnnum[num1]==1){
num1=rand()%numcards;
}
}
prevdrawnnum[num1]=1;
ptr = new card;
ptr->cardvalue=num1;
ptr->next=NULL;
if(start==NULL)
start=ptr;
else
{
temp=start;
while(temp->next!=NULL)
temp=temp->next;
temp->next=ptr;
}
}
return;
}
void displayDeck()
{
char suits[4]={'C','D','H','S'};
char ranks[13]={'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
int label=1, num2,suit=0,face=0;
temp=start;
while(temp->next!=NULL)
{
num2=temp->cardvalue;
if(temp->cardvalue > 52)
{
suit=num2%4;
face=(num2/4)-13;
cout<<label<<". "<<ranks[face]<<"-"<<suits[suit]<<"          ";     
label++;
temp=temp->next;
}
else
{
suit=num2%4;
face=num2/4;
cout<<label<<". "<<ranks[face]<<"-"<<suits[suit]<<"          ";     
label++;
temp=temp->next;
}
if(label%4==0)
cout<<endl;

}
cout<<endl<<"Total Number of Cards: "<<label-1<<endl;
return;
}
void drawCard()
{
char suits[4]={'C','D','H','S'};
char ranks[13]={'2','3','4','5','6','7','8','9','T','J','Q','K','A'};
int num2,suit=0,face=0;
temp=start;
num2=temp->cardvalue;
if(temp->cardvalue>52)
{
suit=num2%4;
face=(num2/4)-13;
cout<<endl<<"Card Drawn: "<<ranks[face]<<"-"<<suits[suit]<<endl;    
temp=start;
start=start->next;
free(temp);
}
else{
suit=num2%4;
face=num2/4;
cout<<endl<<"Card Drawn: "<<ranks[face]<<"-"<<suits[suit]<<endl;    
temp=start;
start=start->next;
free(temp);
}
return;
}
void deconDeck()
{
while(start!=NULL)
{
temp=start;
start=start->next;
free(temp);
}
}

以上是一个文件中的代码,任何人都可以给我一些关于如何将其分离为标头/实现的指导吗?

通常,头文件的用途是声明内容。例如,structclass声明、函数原型(声明函数的返回类型、名称和参数)等。另一件需要注意的事情是,标头的内容周围应该有一个标头保护,以避免多次声明相同的内容。

与该头文件关联的 cpp 文件(如果有)将包含在头文件中声明的内容的实现。这通常总结为函数和方法实现。它还必须在其顶部包含标题。

在您的特定情况下,main.cpp应仅包含main函数(以及运行所需的少数include)。标头应包含您的结构和您放在 main 上方的函数原型。最后,与标头关联的 cpp 文件应包含所有函数(main除外)。

附带说明一下,最好在头文件中尽可能少地放置include(通常可以包含在实现的 cpp 文件中,或者避免通过前向声明包含)。

这里有一个小例子:

测试.h:

#ifndef TEST_H
#define TEST_H
struct A{
int b;
};
int foo(int bar);
#endif

测试.cpp

#include "test.h"
int foo(int bar) {
return bar;
}

主.cpp

#include "test.h"
int main() {
foo(4);
return 0;
}