c++类的定义和实现写在两个不同文件下,怎么样让程序正确运行

C++语言 码拜 8年前 (2016-04-27) 1876次浏览
本人是c++新手一枚,望大家见谅。

//main.cpp
#include "fiveChess.h" 
#include<iostream>
using namespace std;
int main()
{
	fiveChess f;
	f.runGame();
	return 0;
}

下面是fiveChess(五子棋)类的定义

//fiveChess.h
#ifndef A_H
#define A_H
#include<iostream>
using namespace std; 
#define maxm 25 //定义棋盘大小
class fiveChess
{
	private:
		int cx;		 //光标的x坐标 
		int cy;
		int cols;    //棋盘缓冲器当前列数 
		int rows;    //棋盘缓冲器当前行数 
		int now;     //下棋方 
		int round;   //回合数 
		int ch[maxm][maxm];  //储存棋盘上的棋子 
		char buff[maxm*2+1][maxm*4+3]; //棋盘缓冲器
//		static int maxm;    //棋盘大小 

		void gotoxy(int x, int y);
		void init();              //初始化对局 
		void printChessBoard();   //输出棋盘 
		void write(char *c1, char const * c2);  //向棋盘c1写入字符c2 
		int check();
		char const *getCurse(int i, int j);     //获取光标 
		char const *getTable(int i, int j);     //获取当前位置对应的制表符 

	public:
		void runGame();
};
#endif

下面是类的实现

//fiveChess.cpp
#include "fiveChess.h"
#include<windows.h>
//#include<stdio.h>
#include<conio.h>
//#include<stdlib.h>
#include<iostream>
#include<string.h>
#define BLACK 1
#define WHITE 2
//#define 
//#define maxm 25 //定义棋盘大小
using namespace std;
//fiveChess::fiveChess(){
//	maxm = 15;
//}
//int fiveChess::maxm = 10;
void fiveChess::gotoxy(int x, int y){ 
	COORD pos = {x,y};
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut, pos);
}
void fiveChess::init(){
	cx = cy = maxm/2;
	round = 0;
	now = BLACK;  //黑方先开局 
	memset(ch,0,sizeof(ch));
	memset(buff,"\0",sizeof(buff));
}
void fiveChess::write(char *c1, char const * c2){
	cols+=strlen(c2); 
	while(*c2 != "\0")
		*c1++ = *c2++;
}
//scdn不支持特殊字符,此处删掉
char const* fiveChess::getCurse(int i,int j){
}
//scdn不支持特殊字符,此处删掉
char const* fiveChess::getTable(int i,int j){
}
int fiveChess::check(){  //胜负检查,即判断当前走子位置有没有造成五连珠的情况
	int w=1,x=1,y=1,z=1,i;//累计横竖正斜反邪四个方向的连续相同棋子数目
	for(i=1;i<5;i++)
		if(cy+i<maxm&&ch[cx][cy+i]==now) //向下检查
			w++;
		else break;
	for(i=1;i<5;i++)
		if(cy-i>0&&ch[cx][cy-i]==now) //向上检查
			w++;
		else break;
	if(w>=5)
		return now;	//若果达到5个则判断当前走子玩家为赢家
	for(i=1;i<5;i++)
		if(cx+i<maxm&&ch[cx+i][cy]==now)	 //向右检查
			x++;
		else break;
	for(i=1;i<5;i++)
		if(cx-i>0&&ch[cx-i][cy]==now) //向左检查
			x++;
		else break;
	if(x>=5) 
		return now;
	for(i=1;i<5;i++)
		if(cx+i<maxm&&cy+i<maxm&&ch[cx+i][cy+i]==now) //向右下检查
			y++;
		else break;
	for(i=1;i<5;i++)
		if(cx-i>0&&cy-i>0&&ch[cx-i][cy-i]==now) //向左上检查
			y++;
		else break;
	if(y>=5)
		return now;
	for(i=1;i<5;i++)
		if(cx+i<maxm&&cy-i>0&&ch[cx+i][cy-i]==now) //向右上检查
			z++;
		else break;
	for(i=1;i<5;i++)
		if(cx-i>0&&cy+i<maxm&&ch[cx-i][cy+i]==now) //向左下检查
			z++;
		else break;
	if(z>=5)
		return now;
	return 0;
}
void fiveChess::runGame(){
	int op;
	int winner;
	int cnt=0; 
	char const* showText;
	init();
//	exit; 
	while(1){
		printChessBoard();
		op = getch();   //非标准函数,按下键盘无需回车自动读取 
		if(op == 0x20){
			if(ch[cx][cy] == 0){
				ch[cx][cy] = now;
//				round++;
				cnt++;
			}
			if(winner = check()){  //检查胜负
				if(winner == BLACK)
					showText = "黑方获得了胜利!";
				else if(winner == WHITE)
					showText = "白方获得了胜利!";
				gotoxy(0, 2*(2*maxm+1)+2);
				cout<<showText<<endl;
			}
			now = now==BLACK ? WHITE : BLACK;
		}
		else if(cnt == maxm*maxm){
//			showText = "白方获得了胜利!";
			gotoxy(0, 2*(2*maxm+1)+2);
			cout<<"平局!"<<endl;
		}

		else if(op == 0xE0){  //特殊标志 
			op == getch();
			switch(op){
				case 0x4B:{cx--;break;}
				case 0x48:{cy--;break;}
				case 0x4D:{cx++;break;}
				case 0x50:{cy++;break;}
			}
			if(cx<0)cx=maxm-1;//假如光标位置越界则移动到对侧
			if(cy<0)cy=maxm-1;
			if(cx>maxm-1)cx=0;
			if(cy>maxm-1)cy=0;
		}
	}
}
//scdn不支持特殊字符,此处删掉
void fiveChess::printChessBoard(){

}

直接编译运行main.cpp报错
undefined reference to `fiveChess::runGame()”
[Error] ld returned 1 exit status
问一下要怎样才能让程序跑起来呢。

解决方案

3

包含关系上没发现有什么问题

10

题主用vs吗?是的话请学一下怎么建立“工程”
用gcc之类的,请学一下makefile怎么写

10

IDE 内,直接添加到工程中
也可以手动写 makefile


命令行下
分别编译两个.cc,cxx,cpp
然后链接

2

这算不上新手了吧,谦虚了

10

代码好像没啥问题啊
题主用的IDE还是本人手动编译链接的

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明c++类的定义和实现写在两个不同文件下,怎么样让程序正确运行
喜欢 (0)
[1034331897@qq.com]
分享 (0)