2011-09-26 1 views
1

누군가이 세그먼트를 실행하는 이유를 말해 줄 수 있습니까? 내가 시도하고 개체 배열의 배열에 대한 포인터, 어떻게이 문제를 해결할 수 있습니까? sf :: Vector2 클래스의 선언은 다음에서 찾을 수 있습니다. http://www.sfml-dev.org/documentation/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 ++ 컴파일러

+0

김포 :: Vector2 및 방법이 어떻게 구현되어 함께 초기화? 코드를 보면 코드가 제대로 작동한다고 가정합니다. sf :: Vector2에 대한 액세스가 없으면 아무도이 문제를 해결할 수 없으므로 더 널리 사용 가능한 유형으로 이것을 재현 할 수 있습니까? – Chad

+1

예상대로 간단한 예제 (sf :: Vector2 을 char로 대체)가 작동하는 것 같습니다. – Chad

+0

정의 됨 http://www.sfml-dev.org/documentation/1.6/Vector2_8hpp_source.php – aultbot

답변

1

당신은 할당하거나 당신이 참조하는 types 배열을 인스턴스화 않았다. types은 구체적인 값을 nullptr에 할당 할 수없는 포인터입니다. 현재는 어떻게 남았습니까?

그냥 배열 대신 sf::Vector2<int> types[2][4];

당신은 컬렉션을 가지고 Vector2 오브젝트하는 Matrix 개체, 다음 Tet 객체를함으로써 아마도 간단한 더 효과적인 디자인을 고려하는 것이 좋습니다 포인터로 선언 STL 컨테이너와 알고리즘을 사용하는 행렬을 사용하는 것이 좋습니다.

+0

감사. 형식 배열을 인덱싱하고 의사 난수 생성기에서 반환 한 인덱스 값 (0 또는 1)에 따라 I 또는 J를 반환 할 수 있기를 원했습니다. – aultbot

+0

배열을 사용하는 것이 가장 좋을 것이고 포인터를 남겨 두는 것이 좋습니다. 그렇다면 메모리 관리에 대해 걱정할 필요가 없습니다. – AJG85

+0

sf :: Vector2 대신에 2D 배열을 선언 할 수 있다고 생각합니다. sf :: Vector2 [2] [4] – aultbot

1

어쩌면 첫번째 유형을 할당하고 {& I, & J는}

관련 문제