Ошибка сегментации при попытке индексировать массив массивов объектов через указатель - PullRequest
1 голос
/ 27 сентября 2011

Может кто-нибудь сказать мне, почему у меня возникает ошибка сегментации? Я пытаюсь и указатель на массив из массива объектов, как я могу решить эту проблему? Объявление класса sf :: Vector2 можно найти здесь: http://www.sfml -dev.org / documents / 1.6 / classsf_1_1Vector2.php

Большое спасибо.

#include <SFML/System/Vector2.hpp>
#include <iostream>
class Tet
{
    public:
        Tet();
   private:
        static sf::Vector2 <int> I[4];
        static sf::Vector2 <int> J[4];
        static sf::Vector2 <int> *types[2];

};

sf::Vector2 <int> Tet::I[4] = {sf::Vector2 <int>(0,1),
                               sf::Vector2 <int>(1,1),
                               sf::Vector2 <int>(2,1),
                               sf::Vector2 <int>(3,1)};

sf::Vector2 <int> Tet::J[4] = {sf::Vector2 <int>(1,1),
                               sf::Vector2 <int>(2,1),
                               sf::Vector2 <int>(3,1),
                               sf::Vector2 <int>(3,2)};

sf::Vector2 <int>* Tet::types[2] = { I,J };                                   

Tet::Tet()
{
    //trying to print out x member of first vector of I 
    std::cout << (*(*(types))).x << std::endl; 
}

main()
{
    Tet t = Tet();
}

РЕДАКТИРОВАТЬ: g ++ компилятор

Ответы [ 2 ]

1 голос
/ 27 сентября 2011

сначала можно выделить типы и инициализировать с помощью {& I, & J}

1 голос
/ 27 сентября 2011

Вы никогда не выделяете или не создаете экземпляр массива types, на который ссылаетесь.types - это указатель, которому нельзя присвоить конкретные значения для nullptr, как вы его оставили в данный момент.

Просто объявите его как массив вместо указателя sf::Vector2<int> types[2][4];

Возможно, вы захотите рассмотреть более простой и эффективный дизайн, возможно, имея объект Vector2, объект Matrix, а затем объект Tet, который имеет коллекцию матриц с использованием контейнеров и алгоритмов STL, предпочтительно.

...