2016-07-16 4 views
0

Итак, я только что пришел на C++ с Java и задавался вопросом, как передать параметры в конструктор для 2D-массива. Например, у меня есть класс под названием square, который рисует квадрат, и у меня есть 2D-массив квадратов, но мой конструктор принимает x и y так, как бы мне пойти, чтобы передать эти параметры в 2D-массив?Как передать параметры конструктора в 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); 
} 
+0

Короткий ответ: вы не можете этого сделать. –

ответ

0

Вы не можете этого сделать. По какой-то причине C++ обрабатывает многомерные массивы по-разному, так что это дало бы ошибку:

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

Хотя это не так:

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

Решение будет использовать вектор:

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

Вы можете использовать векторы так же, как массивы, но для добавления элементов, которые вы используете name.pushback (object); Возможно, вы также захотите сделать конструктор Square private и иметь статическую функцию, которая проверяет, сколько экземпляров использует name.size() перед созданием нового экземпляра. Это сложное решение, но оно работает.

+0

Если вы не знаете, какие статические функции, вы можете использовать их, поставив слово static перед публичной функцией-членом. Затем вы можете вызвать его, используя Classname :: StaticFunctionname(). – TheBeginningProgrammer

Смежные вопросы