Когда структура / класс находится за пределами функции:
#include <vector>
struct Foo { };
int main()
{
std::vector< Foo > foos;
return 0;
}
Ручки визуализатора отладки STL в Visual Studio 2012 foos
просто хорошо:
Name Value Type
- foos { size=0 } std::vector<Foo,std::allocator<Foo> >
[size] 0 int
[capacity] 0 int
+ [Raw View] 0x0026fbcc {...} std::vector<Foo,std::allocator<Foo> > *
Но когда Foo
это внутри main()
:
#include <vector>
int main()
{
struct Foo { };
std::vector< Foo > foos;
return 0;
}
Отладчик выплевывает типы / значения мусора (?), Которые выглядят как искажение имен, которые были ужасно неправильными:
Name Value Type
- foos {...} std::?$vector@UFoo@?1?main@V?$allocator@UFoo@?1?main@@std@@
- std::?$_Vector_alloc@$0A@U?$_Vec_base_types@UFoo@?1?main@V?$allocator@UFoo@?1?main@@std@@@std@@ {...} std::?$_Vector_alloc@$0A@U?$_Vec_base_types@UFoo@?1?main@V?$allocator@UFoo@?1?main@@std@@@std@@
- std::?$_Vector_val@U?$_Simple_types@UFoo@?1?main@@std@@ {_Myfirst=0x00000000 {...} _Mylast=0x00000000 {...} _Myend=0x00000000 {...} } std::?$_Vector_val@U?$_Simple_types@UFoo@?1?main@@std@@
std::_Container_base0 {...} std::_Container_base0
_Myfirst 0x00000000 {...} main::__l2::Foo *
_Mylast 0x00000000 {...} main::__l2::Foo *
_Myend 0x00000000 {...} main::__l2::Foo *
Два вопроса:
Foo
вне main()
«)Задача ещё не решена.
Других решений пока нет …