gdb无法找到operator []

m3p*_*phi 20 c++ gdb vector

double var1, var2;
std::vector<double *> x;

var1 = 1;
var2 = 2;

x.push_back(&var1);
x.push_back(&var2);
Run Code Online (Sandbox Code Playgroud)

当我在gdb中调试此代码并尝试print x [0]或*x [0]时,我得到:找不到operator [].现在如果我在push_back之后包含这一行:

x[0] = &var1;
Run Code Online (Sandbox Code Playgroud)

我可以访问gdb中的任何特定元素.其他成员也会发生同样的事情,例如front(),at()等.我的理解是编译器/链接器只包含源代码中存在的成员函数,而那些是我可以在gdb中使用的成员函数.有没有办法包含std :: vector的每个成员函数,所以我可以在gdb中访问它们?

Emp*_*ian 29

我的理解是编译器/链接器只包含源代码中存在的成员函数,而那些是我可以在gdb中使用的成员函数.

您的理解不正确/不完整.

std::vector是一个模板类.而不显式实例,编译器是必需的实例方法称为(通常存在于源方法的子集).

有没有办法包含std :: vector的每个成员函数,所以我可以在gdb中访问它们?

对于给定的类型T,您应该能够通过请求它来显式实例化整个向量T,例如:

template class std::vector<double>;
Run Code Online (Sandbox Code Playgroud)

  • @duleshi显式实例化过程生成一个可识别的类,该类与定义一个类可比。如果您不能在main中定义类,那么我不明白为什么应该允许您在main中进行显式实例化。 (2认同)

phi*_*hil 9

尝试通过向量的内部成员进行打印.

print *(x._M_impl._M_start+0)

0是您要检查的数据索引.

灵感来自这个答案.