这是一个演示恼人问题的代码:
class A {
public:
A():
m_b(1),
m_a(2)
{}
private:
int m_a;
int m_b;
};
这是控制台视图的输出:
make all
Building file: ../test.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"test.d" -MT"test.d" -o"test.o" "../test.cpp"
../test.cpp: In constructor 'A::A()':
../test.cpp:9: warning: 'A::m_b' will be initialized after
../test.cpp:8: warning: 'int A::m_a'
../test.cpp:3: warning: when initialized here
Finished building: ../test.cpp
问题是在 Problems 视图中我会看到3个单独的警告(输出中包含警告字的行),而输出中确实有4行描述了一个问题。
我有什么东西不见了吗?
其他问题。也许它符合Eclipse的精神,但有没有办法让 Console 视图像大多数IDE那样可以点击(例如Visual Studio,emacs ......)
由于 迪马
答案 0 :(得分:6)
警告中有多行,因为每行引用不同的代码行。被警告的问题是正在发生到第9行声明的m_b
,它是,因为第8行的m_a
是在m_b
之前声明,但它是引起在初始化列表中发生的事情,从第3行开始。
使用gcc,彼此无关的警告可能会一个接一个地出现(即main
中的一堆无关的东西都错了),所以Eclipse无法从输出中看出来这些是单独的警告还是所有与同一问题有关的警告。
答案 1 :(得分:1)
根据this错误报告的最新评论,您应该可以单击控制台视图跳转到CDT 7.0中的代码。
可能值得查看里程碑版本,以查看错误消息的分组是否更好。如果没有提出错误来尝试对相关消息进行分组,那将是一个好主意。
答案 2 :(得分:0)
字段按照在类中声明的顺序进行初始化。编译器通过告诉您构造函数正在以错误的顺序初始化来帮助您。如果初始化顺序很重要,这可能会导致奇怪的错误。
答案 3 :(得分:0)
感谢大卫,但我想你可能误解了我。我指的是eclipse中的'Problems'视图默认按字母顺序排序编译器错误。正如Dima所说,这会导致gcc错误消息出现问题,这些消息分布在两行,例如
因为所有'在此上下文中'行与它们所引用的变量分开。
但是,我刚刚找到了更改编译器错误的排序顺序的选项,在视图顶部的小向下指向三角形(只是刚刚解决了这个问题,因为我在这里设置了视图的选项,因为我是新的去日食。如果你玩这个它会有所帮助,但仍然无法阻止同一文件中的错误被混乱(为什么没有选项只是留下他们原样?)
答案 4 :(得分:0)
我想这是因为CDT仍然有点不成熟,可能无法以最佳方式解析g ++输出。行../test.cpp: In constructor 'A::A()':
不包含行号,因此CDT无法在test.cpp
编辑器中放置错误标记,可能此问题会影响问题视图。
Problems 视图存在更多问题。例如,您只能从视图中删除可见错误,因此如果您获得的默认值超过100个,则必须按顺序删除100个百分比。如果在独立头文件中发生错误,清除后也不会自动删除错误。只是放纵,他们正在改进从发布到发布的CDT。
其他问题 - “使控制台视图可点击”是什么意思?