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

时间:2017-03-20 14:26:28

标签: c++ header-files

对于此分配,我们需要有头文件,实现文件和主文件。我已经使用一个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);
}

}

上面是一个文件中的代码,有人可以给我一些关于如何将它分成标题/实现的指导吗?

1 个答案:

答案 0 :(得分:0)

通常,头文件的目的是声明内容。例如,structclass声明,函数原型(声明函数的返回类型,名称和参数)等。另外值得注意的是标题应该有一个标题保护围绕它的内容,以避免多次声明相同的事情。

与该头文件关联的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;
}