有人可以告诉我为什么我会遇到分段错误吗?我试着指向一个对象数组的数组,我怎么能解决这个问题?可以在此处找到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 :(得分:1)
您永远不会分配或实例化您引用的types
数组。 types
是一个指针,您无法将具体值分配给nullptr
,这就是您此刻离开的方式。
只需将其声明为数组而不是指针
sf::Vector2<int> types[2][4];
您可能想要考虑一个更简单,更有效的设计,可能是通过使用Vector2
对象,Matrix
对象,然后是Tet
对象,它具有使用STL容器的矩阵集合和算法最好。
答案 1 :(得分:1)
可能首先分配类型并使用{&amp; I,&amp; J}初始化