2017-03-20 10 views
-2

この割り当てには、ヘッダーファイル、実装ファイル、およびメインファイルが必要です。私は正常に1つの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

あなたのヘッダヘッダファイルには、構造体が含まれている必要があります拡張子が.hの関数宣言実装ファイルの拡張子は.cppの関数定義でなければなりません。 – Sniper

+0

C++を学ぶために使っている本はどれですか? –

+0

@Sniper:コメントはお答えできません –

答えて

0

一般に、ヘッダーファイルの目的はコンテンツを宣言することです。例えば、structclassの宣言、関数プロトタイプ(関数の戻り値の型、名前とパラメータの宣言)などです。また、同じことを何度も宣言するのを避けるため、ヘッダーには内容を囲むヘッダーガードが必要です。

ヘッダーファイルに関連付けられたcppファイル(存在する場合)には、ヘッダーファイルで宣言されたコンテンツの実装が含まれます。これは、関数とメソッドの実装に要約されることがよくあります。ヘッダーもその上部に含めなければなりません。

具体的な状況では、main.cppにはmain機能のみが含まれている必要があります(実行するためにはincludeが必要です)。ヘッダーには、構造体と、メインの上に置く関数プロトタイプが含まれている必要があります。最後に、ヘッダーに関連付けられたcppファイルには、すべての関数(mainを除く)が含まれている必要があります。

さらに、includeをできるだけヘッダーファイルに入れないことをお勧めします(多くの場合、実装する場所にcppファイルを含めることも、前方宣言を使用しないこともできます)。ここで

は小さな例です:

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; 
} 
関連する問題