当我调试下面的一小段代码时,visual studio调试器没有显示我推入struct
的{{1}}的值,它只显示所有字段名称=? ?? 即可。所有其他var都被正确观看了!
有人已经有同样的问题吗?
deque
注意:我对push_back使用了增强范围适配器,但它与typedef struct ToTestDrift{
int num;
uint64_t pts;
ToTestDrift(int n, uint64_t ts): num(n), pts(ts) {}
ToTestDrift(const ToTestDrift& ro):num(ro.num), pts(ro.pts) {}
} drift_t;
ifstream input("test.txt");
std::deque<drift_t> drift;
while(!input.eof())
{
int framenum; uint64_t pts;
input >> pts >> framenum;
push_back(drift)(framenum, pts);
}
相同!
如果我提取类似于以下代码的值,那么drift.push_back
上的watch
就可以了......
t
答案 0 :(得分:0)
我终于找到了这个奇怪问题背后的原因。
我提供的代码不符合C ++ 98且不应该编译(事实上它不能用 GCC 编译)。原因是我们不能使用本地函数,结构/类定义,模板(容器或其他......),read that post for more info。
事实上,在可视化编译器中接受该代码,因为没有结构/类及其字段的ID,调试器有点丢失&#34; ....
我将结构/类定义移到我的函数外面,现在编译器为struct / class创建一个ID,调试器像往常一样工作。
所以而不是
int function()
{
typedef struct ToTestDrift{
int num;
uint64_t pts;
ToTestDrift(int n, uint64_t ts): num(n), pts(ts) {}
ToTestDrift(const ToTestDrift& ro):num(ro.num), pts(ro.pts) {}
} drift_t;
ifstream input("test.txt");
std::deque<drift_t> drift;
while(!input.eof())
{
int framenum; uint64_t pts;
input >> pts >> framenum;
push_back(drift)(framenum, pts);
}
}
写
typedef struct ToTestDrift{
int num;
uint64_t pts;
ToTestDrift(int n, uint64_t ts): num(n), pts(ts) {}
ToTestDrift(const ToTestDrift& ro):num(ro.num), pts(ro.pts) {}
} drift_t;
int function()
{
ifstream input("test.txt");
std::deque<drift_t> drift;
while(!input.eof())
{
int framenum; uint64_t pts;
input >> pts >> framenum;
push_back(drift)(framenum, pts);
}
}
注意,代码的第一个版本符合新的C ++ 11,所有新的编译器放宽了这个限制,因此struct / class的本地函数定义应该可以正常使用visual studio 2013。