简体   繁体   English

使创建的对象成为全局对象[C ++]

[英]Making created objects global [C++]

I'm programming a checkers game as a form of practice for object-oriented design. 我正在编写一个跳棋游戏,作为面向对象设计的一种实践形式。 The error I'm getting is the following: 我收到的错误如下:

First the code: 首先是代码:

#include <iostream>
#include <stdio.h>

using namespace std;

class Piece {

public:
    int ypos, xpos, index;
    string color, kind;

int getY(void)
{
    return ypos;
}

int getX(void)
{
    return xpos;
}

int adjustY(int change)
{
    ypos = ypos + change;
}

int adjustX(int change)
{
    xpos = xpos + change;
}

};



int form(void)
{
string p[24];
for (int i = 0; i <= 23; ++i)
{
    if (i < 4)
    {
        Piece p[i];
        p[i].color = "white";
        p[i].ypos = 7;
        p[i].xpos = i * 2;
        p[i].index = i;
        p[i].kind = "peon";

    }

    else if (i < 8)
    {
        int l;
        l = i - 4;
        Piece p[i];
        p[i].color = "white";
        p[i].ypos = 6;
        p[i].xpos = 1 + (l * 2);
        p[i].index = i;
        p[i].kind = "peon";
    }

    else if (i < 12)
    {
        int m;
        m = i - 8;
        Piece p[i];
        p[i].color = "white";
        p[i].ypos = 5;
        p[i].xpos = (m * 2);
        p[i].index = i;
        p[i].kind = "peon";
    }

    else if (i < 16)
    {
        int n;
        n = i - 12;
        Piece p[i];
        p[i].color = "black";
        p[i].ypos = 0;
        p[i].xpos = 1 + (n * 2);
        p[i].index = i;
        p[i].kind = "peon";
    }

    else if (i < 20)
    {
        int pp;
        pp = i - 16;
        Piece p[i];
        p[i].color = "black";
        p[i].ypos = 1;
        p[i].xpos = (pp * 2);
        p[i].index = i;
        p[i].kind = "peon";
    }

    else
    {
        int q;
        q = i - 20;
        Piece p[i];
        p[i].color = "black";
        p[i].ypos = 2;
        p[i].xpos = 1 + (q * 2);
        p[i].index = i;
        p[i].kind = "peon";
    }
}
}


char matrix[8][8];


int printt(void)
{
for (int i = 0; i = 7; ++i)
{
    for (int j = 0; j = 7; ++j)
    {
        matrix[i][j] = '_';
    }
}
for (int c = 0; c <= 23;++c)
{
    int a, b;
    a = p[c].ypos;
    b = p[c].xpos;
    switch(p[c].kind)
    {
        case "peon":
            switch(p[c].color)
            {
                case "white":
                    matrix[a][b] = 'o';
                    break;

                case "black":
                    matrix[a][b] = 'x';
                    break;

            }
            break;

        case "damen":
            switch(p[c].color)
            {
                case "white":
                    matrix[a][b] = 'O';
                    break;

                case "black":
                    matrix[a][b] = 'X';
                    break;
            }
            break;
    }

}
cout << "   0|1|2|3|4|5|6|7|  X Position (column)(j)" << endl;
cout << endl;
cout << "0  " << matrix[0][0] << "|" << matrix[0][1] << "|" << matrix[0][2] << "|" << matrix[0][3] << "|" << matrix[0][4] << "|" << matrix[0][5] << "|" << matrix[0][6] << "|" << matrix[0][7] << endl;
cout << "0  " << matrix[1][0] << "|" << matrix[1][1] << "|" << matrix[1][2] << "|" << matrix[1][3] << "|" << matrix[1][4] << "|" << matrix[1][5] << "|" << matrix[1][6] << "|" << matrix[1][7] << endl;
cout << "0  " << matrix[2][0] << "|" << matrix[2][1] << "|" << matrix[2][2] << "|" << matrix[2][3] << "|" << matrix[2][4] << "|" << matrix[2][5] << "|" << matrix[2][6] << "|" << matrix[2][7] << endl;
cout << "0  " << matrix[3][0] << "|" << matrix[3][1] << "|" << matrix[3][2] << "|" << matrix[3][3] << "|" << matrix[3][4] << "|" << matrix[3][5] << "|" << matrix[3][6] << "|" << matrix[3][7] << endl;
cout << "0  " << matrix[4][0] << "|" << matrix[4][1] << "|" << matrix[4][2] << "|" << matrix[4][3] << "|" << matrix[4][4] << "|" << matrix[4][5] << "|" << matrix[4][6] << "|" << matrix[4][7] << endl;
cout << "0  " << matrix[5][0] << "|" << matrix[5][1] << "|" << matrix[5][2] << "|" << matrix[5][3] << "|" << matrix[5][4] << "|" << matrix[5][5] << "|" << matrix[5][6] << "|" << matrix[5][7] << endl;
cout << "0  " << matrix[6][0] << "|" << matrix[6][1] << "|" << matrix[6][2] << "|" << matrix[6][3] << "|" << matrix[6][4] << "|" << matrix[6][5] << "|" << matrix[6][6] << "|" << matrix[6][7] << endl;
cout << "0  " << matrix[7][0] << "|" << matrix[7][1] << "|" << matrix[7][2] << "|" << matrix[7][3] << "|" << matrix[7][4] << "|" << matrix[7][5] << "|" << matrix[7][6] << "|" << matrix[7][7] << "   Y Position (line)(i)" << endl;
cout << endl;
}


int main()
{
form();
printt();
cout << "End of Programm" << endl;
system ("pause");
return 0;
}

Then the error: 然后出现错误:

In function 'int printt()': 在函数'int printt()'中:

Line 130 Col 7 [Error] 'p' was not declared in this scope 在此范围内未声明第130行第7行[错误]'p'

I assume the problem is that the objects were created in an outside function. 我认为问题是对象是在外部函数中创建的。 However, using extern creates more problems than I already have, and creating them outside a function is not possible, for the "for (int i=0;i<=23;++i)" statement needs to happen inside a function. 但是,使用extern会产生比我已经存在的更多的问题,并且无法在函数外部创建它们,因为“ for(int i = 0; i <= 23; ++ i)”语句需要在函数内部发生。

My question is: How do I call these objects (Piece p[0], Piece p[1], and so on) to the printt() function ? 我的问题是:如何将这些对象(件p [0],件p [1]等)调用给printt()函数?

Thank you very much, sorry if the question is dumb, I am pretty new to programming. 非常感谢您,如果问题很愚蠢,对编程我还是一个新手。

You should put this definition: 您应该输入以下定义:

Piece p[24];

at the global scope, ie for instance just before the definition of f: 在全局范围内,例如在f的定义之前:

Piece p[24];

int form(void)
{
    for (int i = 0; i <= 23; ++i)

The way you are referencing these objects in the printt function is correct. 您在printt函数中引用这些对象的printt是正确的。

Also, you should remove the 另外,您应该删除

Piece p[i]; 

statements from the int from() implementation. int from()实现中的语句。

Also, you may want to implement a default constructor for your Piece class, to ensure that instances' int fields will be reasonably initialized on construction. 另外,您可能希望为Piece类实现一个默认的构造函数,以确保实例的int字段在构造时得到合理的初始化。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM