错误地说定义为public的类是private
error saying class defined as public is private
使用类继承制作3D井字游戏。编译错误如下。
:
43[错误]'void CPUClass::cpu()'是private
190 [Error]在这个上下文中
看看我的代码,我已经明确地将cpu()定义为公共的。你知道我忽略了什么吗?
#include <iostream>
#include <time.h> //seeding random
#include <windows.h>
using namespace std;
class TTT {
public:
void setup();
void display();
void cpu();
void player();
void check(int);
protected:
int cp; //comp points
int pp; //player points
char board[9]; //board
char board2[9];
char board3[9];
char xo[2];
int rn; //random who goes first
int won;//checks for win or stalemate
int turn;//keeps track of current player
int rc;//random comp move
int full;//see if board is full
int b1f;
int b2f;
int b3f;
};
class CPUClass : public TTT{
void cpu();
};
int main(int argc, char *argv[])
{
TTT ttt;
cout << "Newfangled 3D TicTacToe!" << endl;
cout << "~~play as though all three boards are stacked as a cube. Same rules apply.~~" << endl;
ttt.setup();
}
void TTT::setup(){ //sets up gamespace
won = 0; //game not won
full = 0; //board is full at 9
cp = 0;
pp =0;
b1f = 0;
b2f = 0;
b3f=0;
//the three boards:
board[0] = '1';
board[1] = '2';
board[2] = '3';
board[3] = '4';
board[4] = '5';
board[5] = '6';
board[6] = '7';
board[7] = '8';
board[8] = '9';
board2[0] = '1';
board2[1] = '2';
board2[2] = '3';
board2[3] = '4';
board2[4] = '5';
board2[5] = '6';
board2[6] = '7';
board2[7] = '8';
board2[8] = '9';
board3[0] = '1';
board3[1] = '2';
board3[2] = '3';
board3[3] = '4';
board3[4] = '5';
board3[5] = '6';
board3[6] = '7';
board3[7] = '8';
board3[8] = '9';
srand(time(NULL));
rn = (rand() %2);
if (rn == 0){
turn = 0; // comp goes first
xo[0] = 'x'; //comp = x
xo[1] = 'o'; //human = o
cout << "nYou are 'O'" << endl;
}else{
turn = 1; //player goes first
xo[0] = 'o'; //comp = o
xo[1] = 'x'; // human = x
cout << "nYou are 'X'" << endl;
}
display(); //send this info to display function
}
void TTT::display(){/******you left off revising right here at 2:10******/
cout << "" << endl;
for (int i = 0; i < 9; i++)
{
if ( (i+1) % 3 == 0 )
{
cout << board[i] << endl;
}
else
{
cout << board[i] << " | ";
}
}
cout << "" << endl;
cout << "t";
for (int i = 0; i < 9; i++)
{
if ( (i+1) % 3 == 0 )
{
cout << board2[i] << endl;
cout << "t";
}
else
{
cout << board2[i] << " | ";
}
}
cout << "" << endl;
cout << "tt";
for (int i = 0; i < 9; i++)
{
if ( (i+1) % 3 == 0 )
{
cout << board3[i] << endl;
cout << "tt";
}
else
{
cout << board3[i] << " | ";
}
}
cout << "" << endl;
CPUClass cc;
if (full == 27){ //if board is full
check(won); //check if game has been won or tiedtied
}
else{
if (turn%2 == 0){
player();
}else{
cc.cpu();
}
}
}
void TTT::player(){
int w;
int p;
while (won != 1) //if no one has won
{
cout << "Make your move: Choose a layer [top=1 middle=2 bottom=3]" << endl;
cin>> p;
if (p == 1){
cout << "Make your move: Choose a space" << endl;
cin>>w;
if ((board[w-1] == 'x') || (board[w-1] == 'o')){ //checks if spot is open
cout << "nSpace occupied, Invalid moven";
player();
}else{
board[w-1] = xo[1];//draws current players move
turn ++;
full ++;
b1f++;
display(); //go to display
}
}
else if (p == 2){
cout << "Make your move: Choose a space" << endl;
cin>>w;
if ((board2[w-1] == 'x') || (board2[w-1] == 'o')){ //checks if spot is open
cout << "nSpace occupied, Invalid moven";
player();
}else{
board2[w-1] = xo[1];
turn ++;
full ++;
b2f++;
display();
}
}
else if (p == 3){
cout << "Make your move: Choose a space" << endl;
cin>>w;
if ((board3[w-1] == 'x') || (board3[w-1] == 'o')){ //checks if spot is open
cout << "nSpace occupied, Invalid moven";
player();
}else{
board3[w-1] = xo[1];
turn ++;
full ++;
b3f;
display();
}
}
else{
cout <<"Please select one of the options!nn" ;
player();
}
}
}
void TTT::cpu(){
srand(time(NULL)); //seeds with clock
rc = (rand() %9);
int bc;
if (b1f == 9){ //if a board is filled go one of the opthers
bc = 1+(rand() %2);
}
else if (b3f == 9){
bc = (rand() %2);
}
else if (b2f == 9){
bc = (rand() %2);
if (bc == 1){
bc = 2;
}
}
else {
bc = (rand() %3); //randomly pick one if none are full
}
if (bc == 0){
if ((board[rc] == 'x' ) || ( board[rc] == 'o')){
cpu(); //loops and finds a new spot
}else{
turn++;
full ++;
b1f++;
board[rc] = xo[0];
display();
}
}
else if (bc == 1){
if ((board2[rc] == 'x' ) || ( board2[rc] == 'o')){
cpu(); //loops and finds a new spot
}else{
turn++;
full ++;
b1f++;
board[rc] = xo[0];
display();
}
}
else if (bc == 2){
if ((board3[rc] == 'x' ) || ( board3[rc] == 'o')){
cpu(); //loops and finds a new spot
}else{
turn++;
full ++;
b1f++;
board[rc] = xo[0];
display();
}
}
}
void TTT::check(int wo)// check wins
{
//horizontal win
if ((board[0] == 'x') && (board[1] == 'x') && (board[2] == 'x')){
if (rn == 0){
cp++;
}else{
pp++;
}
}
if ((board[6] == 'x') && (board2[4] == 'x') && (board3[2] == 'x')){
if (rn == 0){
cp++;
}else{
pp++;
}
}
wo =1;
cout << "nGame Over!n" ;
cout << "nScore: Player - "<<pp<<" Computer - "<<cp<<"n" ;
if (pp == cp){ //if points are =
cout << "STALEMATEn" ;
}
else if (pp > cp){
cout << "YOU WINn" ;
}
else if (pp < cp){
cout << "The computer winsn" ;
}
int c;
cout<<"nPlay again? [1] for yes anything else to exitn" ;
cin >> c;
if (c == 1){ //if user enters 1, reset the game
setup();
}
else{
exit(0);
}
}
默认情况下,类访问为private。如果你想通过CPUClass
对象调用CPUClass::cpu()
函数,你需要将cpu()
设为public:
class CPUClass : public TTT{
public: //<<----- make below functions public
void cpu();
};
类中的方法在默认情况下本身是私有的,除非您另行指定
class CPUClass : public TTT{
public:
void cpu();
};
如果您想在另一个成员函数中使用类的成员函数,您可以这样调用该函数:
TTT::cpu(); //replace for any calls to cc.cpu();
从你的代码中不清楚cpucclass的用途。你目前正在做的是创建一个新类,它继承了基类的所有内容。然后用一个新的空方法覆盖基类的cpu()方法,并将其访问权限更改为private。
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- std::make_shared和protected/private构造函数
- 加载"D:UsersPublicDocumentsopencvbuildx64vc14binopencv_world340d.dll",找不到或打开PDB文件
- ' class a : b ' 和 ' class a : public b ' 之间的继承类不同
- 如何摆脱C++中未解析的外部符号"private: static char"错误?
- C++ - "private"单身人士?
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 将复制构造函数设置为private和=delete有什么区别
- LNK2001:未解析的外部符号public:static类std::vector
- public:静态常量字符串声明/初始化问题
- 库设计混乱.. "public"/"private"(模板)标题,库文件..?
- 我是否必须在类中的所有变量C++设置为 private?
- 在scons中将访问说明符从private更改为public
- 在不使用public方法的情况下修改类private外部类
- 带有混合继承修饰符(protected/private/public)的钻石继承
- 类的元素是否以public或private方式添加
- 为什么 C# 中不支持"public"或"private"或"protected"继承
- 为某些模板参数设置public/private on template函数
- 错误地说定义为public的类是private
- private或public继承自boost::non_copyable