gpt4 book ai didi

c++ - g++中的奇怪错误

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:08 24 4
gpt4 key购买 nike

我的程序有一个类,该类包含名为 levelsLevel 对象 vector 。在成员函数中有这一行:

levels.push_back(level::Level());

我今天对我的程序做了几处更改,那行代码开始出现段错误:

0x0804d248 in void std::vector<yarl::level::Level, std::allocator<yarl::level::Level> >::emplace_back<yarl::level::Level>(yarl::level::Level&&) (this=0x0, 
__args#0=...) at /usr/include/c++/4.4/bits/vector.tcc:93
93 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)

我认为 Level 对象可能已经损坏,所以我在函数调用之外声明了它,这样我就可以在 gdb 中检查它,如下所示:

level::Level foo();
levels.push_back(foo);

原来这不能编译。它 g++ 给出了两个我以前从未见过的错误:

error: invalid conversion from 'level::Level (*)()' to 'int'
error: initializing argument 1 of 'level::Level::Level(int, int, int)'

现在,Level 的构造函数采用三个整数参数,每个参数都有默认值。我认为它可能一直在提示我没有传递这三个参数,即使它们有默认值,所以我更改了第一行以传递默认值:

level::Level foo(1, 100, 100);

这现在可以编译,但仍然会出现段错误,但会在不同的位置进行(尽管是相同的测试):

0x0804c699 in std::vector<yarl::level::Level, std::allocator<yarl::level::Level> >::push_back (this=0x0, __x=...) at /usr/include/c++/4.4/bits/stl_vector.h:735
735 if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage)

我意识到这些代码太少,无法指望你们能够解决我的问题,但也许有人可以告诉我更多关于这些错误的含义?特别是那些 g++ 错误;我不知道为什么它不接受一个空的 Level 构造函数,因为它的所有参数都是默认的,而且我不知道 (*)() 部分是什么错误的意思(这使得错误对谷歌来说是一个非常令人沮丧的错误)。

最佳答案

至少有一个错误非常简单。这:

level::Level foo();

是 C++ 中一个相当常见的错误,称为 most vexing parse .您没有声明名称为 foo 且类型为 level::Level 的变量,而是声明了一个具有该名称和不带参数的返回类型的函数。去掉括号声明变量

您的其他调用失败是因为(如堆栈跟踪中所示)this 为 NULL,但我不明白为什么会这样,尤其是当您似乎在对堆栈变量进行操作并且不是指针

关于c++ - g++中的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3097626/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com