我有一个类,它包含一个指向类的指针向量。在它的大多数成员函数中,我可以很好地访问和修改向量。但是,在一个函数中,即使调用 .size() 或获取迭代器也会导致我的程序出现段错误。
这是具有指向类的指针向量的类:
class floor
{
public:
floor(string imageFile, string a_walkwayFile, string waypointFile, int a_id, sf::Vector2i a_pos);
~floor();
int getId() { return id; };
void update(sf::RenderWindow* App);
sf::Sprite* getSprite() { return sprite; };
vector<int> parseCSVLine(string line);
void loadWalkways();
void convertToView(sf::RenderWindow* App, sf::View* view);
bool pointInWalkway(sf::Vector2f pt);
private:
vector<sf::RectangleShape*> walkWays;
sf::Sprite* sprite;
int id;
float scale;
string walkwayFile;
};
这是将对象添加到向量中的片段:
walkWays.push_back(new sf::RectangleShape());
walkWays[walkWays.size() - 1]->setPosition(sf::Vector2f(parsedLine[0], parsedLine[1]));
walkWays[walkWays.size() - 1]->setSize(sf::Vector2f(parsedLine[2] - parsedLine[0], parsedLine[3] - parsedLine[1]));
walkWays[walkWays.size() - 1]->setFillColor(sf::Color(0,0,255,25));
walkWays[walkWays.size() - 1]->setOutlineColor(sf::Color::Blue);
walkWays[walkWays.size() - 1]->setOutlineThickness(3);
这是一段代码,它总是可以很好地访问向量:
void floor::update(sf::RenderWindow* App)
{
App->draw(*sprite);
for(int i = 0; i < walkWays.size(); ++i)
App->draw(*walkWays[i]);
}
现在这里是函数,每次调用或引用函数都会导致段错误:
bool floor::pointInWalkway(sf::Vector2f pt)
{
cout << walkWays.size() << endl; // this segfaults
if(walkWays.size() != 0) // this segfaults
for(vector<sf::RectangleShape*>::iterator it = walkWays.begin(); it != walkWays.end(); ++it) // this segfaults too!
if((*it)->getGlobalBounds().contains(pt.x, pt.y))
return true;
return false;
}
任何有关我将如何解决此问题的指示将不胜感激!