Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ std::vector::push_back无法将数据添加到我的向量_C++_Vector - Fatal编程技术网

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的对象。我会测试我有多个独立对象的理论。在两个位置打印和打印区域。如果它们不同,则有两个对象。如果它们是相同的,那么在第一步是创建一个最小的编译示例来演示您的问题。这意味着一个完整的程序可以编译,但不包含您认为与问题无关的内容。猜得好。我的水晶球需要在内部范围内重新申报。猜得好。我的水晶球涉及在内部范围内重新申报。