如何在2D数组中传递构造函数参数?

时间:2016-07-16 20:26:59

标签: c++ arrays

所以我刚刚从Java学习C ++,并想知道如何将参数传递给2D数组的构造函数。例如,我有一个名为square的类,它绘制了一个正方形,我有一个2D正方形数组,但是我的构造函数需要一个x和ay,那么我将如何将这些参数传递给2D数组?

// Main.cpp
#include <SFML\Graphics.hpp>

#include "Square.h"

Square grid[10][10];

int main()
{
sf::RenderWindow renderWindow(sf::VideoMode(800, 600), "Chess 2.0");            

while (renderWindow.isOpen())                                                       
{
    sf::Event evnt;
    while (renderWindow.pollEvent(evnt))
    {
        if (evnt.type == sf::Event::Closed)
        {
            renderWindow.close();
        }
    }
    renderWindow.clear(sf::Color::White);
    /// RENDER HERE

    for (int i = 0;i < 10;i++)
    {
        for (int j = 0;j < 10;j++)
        {
            // Init 2D array here
        }
    }
    renderWindow.display();
}

return 0;
}

// Square class
Square::Square(float x, float y)
{
    sf::RectangleShape rectangle(sf::Vector2f(100, 100));
    rectangle.setPosition(x, y);
}

1 个答案:

答案 0 :(得分:0)

你无法做到这一点。出于某种原因,C ++以不同方式处理多维数组,因此会产生错误:

    void func(int param[][]) {}

虽然这不会:

   void func(int param[][1]) {}

解决方案是使用矢量:

   #include <vector>
   vector<vector<Square>> grid;

您可以使用与数组相同的向量,但要添加使用name.pushback(object)的项目; 您可能还希望将Square构造函数设置为私有,并且具有一个静态函数,该函数在创建新实例之前使用name.size()检查有多少实例。这是一个艰难的解决方法,但它确实有效。