对于此分配,我们需要有头文件,实现文件和主文件。我已经使用一个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);
}
}
上面是一个文件中的代码,有人可以给我一些关于如何将它分成标题/实现的指导吗?
答案 0 :(得分:0)
通常,头文件的目的是声明内容。例如,struct
和class
声明,函数原型(声明函数的返回类型,名称和参数)等。另外值得注意的是标题应该有一个标题保护围绕它的内容,以避免多次声明相同的事情。
与该头文件关联的cpp文件(如果有)将包含头文件中声明的内容的实现。这通常归结为函数和方法实现。它还必须在顶部包含标题。
在您的具体情况下,main.cpp
应仅包含main
函数(以及运行所需的少数include
)。标题应包含您的结构和放在主要上方的函数原型。最后,与标题关联的cpp文件应包含所有函数(main
除外)。
另一方面,最好在头文件中放置尽可能少的include
(通常可以包含在您实现的cpp文件中,或者避免包含前向声明)。< / p>
这是一个小例子:
test.h:
#ifndef TEST_H
#define TEST_H
struct A{
int b;
};
int foo(int bar);
#endif
TEST.CPP
#include "test.h"
int foo(int bar) {
return bar;
}
的main.cpp
#include "test.h"
int main() {
foo(4);
return 0;
}