如何访问同一类内部方法的方法?

时间:2018-02-05 19:59:08

标签: c++ multidimensional-array

using namespace std;
class Puzzle
{
public:
    void SetTable() //Is there a better way to do this? (2d array)
    {
        const int four = 4;
        char Table[four][four]=

        {
            {'f', 'k', 's','a'},
            {'l', 'u', 'o','w'},
            {'y', 'o', 'n', 'a'},
            {'x', 't', 'o', 'y'}
        };
    }

    void OutputTable()
    {
        int n=0;
        while (n < 4)
        {
            for (int x = 0; x < 4; x++)
            {
                cout << Table[x][n] << "   "; //error here
            }
            cout << endl;
            cout << endl;
            n++;
        }

    }
};

int main()
{
   Puzzle connect;
   connect.SetTable();
   connect.OutputTable();
   return 0;
}

有没有更好的方法在类Puzzle中设置2d数组? 如何在void OutputTable中访问void SetTable? 所有变量都必须在Puzzle类中。 提前谢谢!

2 个答案:

答案 0 :(得分:1)

我会建议你练习更多,因为你在问题中显示的是错误的,并且有很多方法可以实现它,这是错误的方式,因为你所说的2D数组无法从其他任何地方访问,像hidden这样的函数并没有设置2D数组的内容只是声明函数内部只有一个2D数组。

为了帮助您开始,请执行以下操作:

#include <iostream>
using namespace std;
class Puzzle
{
public:
    char Table[4][4] =
    {
        {'f', 'k', 's','a'},
        {'l', 'u', 'o','w'},
        {'y', 'o', 'n', 'a'},
        {'x', 't', 'o', 'y'}
    };
    // This function will be more useful if the `Table` is not public
    void SetTable(int row, int col, char value)
    {
        Table[row][col] = value;
    }

    void OutputTable()
    {
        int n=0;
        while (n < 4)
        {
            for (int x = 0; x < 4; x++)
            {
                cout << Table[x][n] << "   "; //error here
            }
            cout << endl;
            cout << endl;
            n++;
        }

    }
};

int main()
{
   Puzzle connect;
   connect.SetTable(2, 3, 'A');
   connect.OutputTable();
   return 0;
}

答案 1 :(得分:0)

使用std::array作为类成员变量来实现。

您的代码应如下所示:

using namespace std;
class Puzzle
{
    constexpr int four = 4;
    std::array<std::array<char>,four>four> Table;

public:
    Puzzle() : Table {
            {'f', 'k', 's','a'},
            {'l', 'u', 'o','w'},
            {'y', 'o', 'n', 'a'},
            {'x', 't', 'o', 'y'}
        } {}
    }
    // void SetTable() omit that completely

    void OutputTable()
    {
        for(const auto& row : Table) {
            for(const auto& col : row) {
            {
                cout << col << " ";
            }
            cout << endl;
        }    
    }
};

int main()
{
   Puzzle connect;
   connect.OutputTable();
   return 0;
}