创建头文件和实现文件时出现问题
Problems creating a header file and implementation 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);
}
}
以上是一个文件中的代码,任何人都可以给我一些关于如何将其分离为标头/实现的指导吗?
通常,头文件的用途是声明内容。例如,struct
和class
声明、函数原型(声明函数的返回类型、名称和参数)等。另一件需要注意的事情是,标头的内容周围应该有一个标头保护,以避免多次声明相同的内容。
与该头文件关联的 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;
}
相关文章:
- 使用mongocxx驱动程序时包含头文件问题
- 生成文件问题
- 从文件问题加载纹理 Android NDK 和 OpenGL
- Xcode 11 头文件问题
- 使用 c++ ifstream 读取文本文件问题
- 单独的类声明和方法定义文件问题
- C++生成文件问题
- 生成文件问题(体系结构x86_64的未定义符号:"_main",引用自:主可执行文件的隐式入口/启动)
- C++删除未使用的库的生成文件问题
- C++ 使文件问题
- 阅读矩阵市场文件C++问题
- 查找第一个文件问题无法使任何示例正常工作。
- "Recursive Makefile Considered Harmful"样式生成文件问题
- 标题文件问题中的类定义
- 嵌套 while 循环,包含文件 c++ 问题
- 几个制作文件问题
- 生成文件问题,获取"目标'rgbapixel.o'的配方失败"
- 从yaml文件问题opencv读取数据
- 类成员C++标头和 .cc 文件问题
- 添加选项以显示百分比时出现生成文件问题