C++ std::vector::push_back无法将数据添加到我的向量
我有两段代码在没有抛出任何错误的情况下弄乱了: 第一部分是来自一个自定义类,我正试图将其推入一个数组中C++ std::vector::push_back无法将数据添加到我的向量,c++,vector,C++,Vector,我有两段代码在没有抛出任何错误的情况下弄乱了: 第一部分是来自一个自定义类,我正试图将其推入一个数组中 class idRect { public: sf::FloatRect rect; int id; idRect(int _id, sf::FloatRect _rect) : id(_id), rect(_rect) {} }; 第二部分是调用函数的地方 if((deltaX + deltaY) < 500) { //Tax
class idRect {
public:
sf::FloatRect rect;
int id;
idRect(int _id, sf::FloatRect _rect) : id(_id), rect(_rect) {}
};
第二部分是调用函数的地方
if((deltaX + deltaY) < 500) { //Taxi distance calculation
cout << endl << "Passed check" << endl;
gloAreas.push_back(idRect(id, entity.getGlobalBounds()));
}
gloAreas是一个全局定义的向量,其中包含idRect对象
如前所述,我在控制台中观察到,它通过了检查输出,并且向量的大小没有增加EDIT:global
编辑:该错误似乎也是随机的,仅在调用push_-back函数的对象的六分之一实例中发生
我将SFML用于sf::FloatRect,它基本上只是一个由4个浮点组成的向量。getGlobalBounds是SFML中的另一个函数,它以sf::FloatRect格式返回精灵的边框
你知道哪里出了问题吗
真诚地,
斯泽佩林
编辑2:
这个错误似乎是由于我自己的不称职和std::multiset的排序之间的混合而爆发的,也许我会在另一个线程^^^^中使用sscce ofc
谢谢你们的时间和帮助。如果gloares被定义为静态的,它就不是真正的全局。它将具有全局范围,但将为每个翻译单元创建一份副本
对于全局,您需要使用extern声明它,并在单个实现文件中定义它
免责声明:答案只是猜测,我的水晶球今天可能会关闭…如果gloares被定义为静态,它将不会是真正的全局。它将具有全局范围,但将为每个翻译单元创建一份副本
对于全局,您需要使用extern声明它,并在单个实现文件中定义它
免责声明:答案只是猜测,我的水晶球今天可能会关闭…我的水晶球答案:您已在内部范围内重新定义了gloareats,如下所示:
vector<idRect> gloAreas; // defines global
void F( vector<idRect> gloAreas ) // defines local instance
{
gloAreas.push_back(); // affects local instance
return; // destroys local instance
}
int main() {
F(gloAreas); // Copies global instance to parameter
// global remains unchanged.
}
我的水晶球回答:您在内部范围内重新定义了gloareats,如下所示:
vector<idRect> gloAreas; // defines global
void F( vector<idRect> gloAreas ) // defines local instance
{
gloAreas.push_back(); // affects local instance
return; // destroys local instance
}
int main() {
F(gloAreas); // Copies global instance to parameter
// global remains unchanged.
}
你真的能给我们申报地区吗?还有,你有idRect的复制构造函数吗?是什么让你相信我的向量的大小没有增加?我没有看到任何打印报表。尝试在.push_之前和之后打印gloares.size,让自己相信.push_确实有作用。然后对此进行调查。push_back不会导致您所期望的任何更改。@Ballenszeppelin-将其打印在这段代码中,然后查看是否匹配。Luchian和我都怀疑你有不止一个名为gloares的对象。我会测试我有多个独立对象的理论。在两个位置打印和打印区域。如果它们不同,则有两个对象。如果它们是相同的,那么在第一步是创建一个最小的编译示例来演示您的问题。这意味着一个完整的程序可以编译,但不包含你认为与问题无关的内容。你能给我们一个gloares声明吗?还有,你有idRect的复制构造函数吗?是什么让你相信我的向量的大小没有增加?我没有看到任何打印报表。尝试在.push_之前和之后打印gloares.size,让自己相信.push_确实有作用。然后对此进行调查。push_back不会导致您所期望的任何更改。@Ballenszeppelin-将其打印在这段代码中,然后查看是否匹配。Luchian和我都怀疑你有不止一个名为gloares的对象。我会测试我有多个独立对象的理论。在两个位置打印和打印区域。如果它们不同,则有两个对象。如果它们是相同的,那么在第一步是创建一个最小的编译示例来演示您的问题。这意味着一个完整的程序可以编译,但不包含您认为与问题无关的内容。猜得好。我的水晶球需要在内部范围内重新申报。猜得好。我的水晶球涉及在内部范围内重新申报。