Visual studio &引用;调用堆栈“;对于C++;VisualStudio2005中的错误

Visual studio &引用;调用堆栈“;对于C++;VisualStudio2005中的错误,visual-studio,visual-c++,visual-studio-2005,compiler-errors,compiler-warnings,Visual Studio,Visual C++,Visual Studio 2005,Compiler Errors,Compiler Warnings,Visual Studio 2005(C++)中是否存在编译器错误的“调用堆栈” 例如,我使用boost::scoped_ptr作为QHash中的值。但是,这会导致以下编译错误: 1>c:\qt\include\qtcore\../../src/corelib/tools/qhash.h(743) : error C2248: 'boost::scoped_ptr<T>::operator =' : cannot access private member declared i

Visual Studio 2005(C++)中是否存在编译器错误的“调用堆栈”

例如,我使用boost::scoped_ptr作为QHash中的值。但是,这会导致以下编译错误:

1>c:\qt\include\qtcore\../../src/corelib/tools/qhash.h(743) : error C2248: 'boost::scoped_ptr<T>::operator =' : cannot access private member declared in class 'boost::scoped_ptr<T>'
1>c:\qt\include\qtcore\../../src/corelib/tools/qhash.h(743):错误C2248:“boost::scoped_ptr::operator=”:无法访问在类“boost::scoped_ptr”中声明的私有成员
从构建输出中,我知道是哪个源文件导致了错误,以及qhash.h中导致错误的行号,但我正试图跟踪源文件中生成错误的行号(因此产生了“调用堆栈”的想法)

请注意,我不是在寻找在QHash中使用作用域_ptr问题的解决方案,而是寻找跟踪编译错误生成位置的问题。这也有助于追踪奇怪的警告。在使用模板类时,我经常遇到这个问题


谢谢

如果查看生成输出,应该可以看到发生此错误时正在编译哪个项目和哪个.cpp文件


这里实际上没有“调用堆栈”的概念,因为编译器一次只处理一个源文件。头文件中存在编译器错误,因此需要找出正在编译的源文件(包括该头文件)。

这些类型的错误可能很难跟踪。通常,我最后会注释掉代码,找到有问题的行并从那里开始工作。在这样做一段时间后,您将学习更好地阅读错误消息,并了解是什么导致编译器出错。目前,编译器的错误消息非常可怕


在本例中,它表示您有一个类型为
boost::scoped_ptr
的对象,它正试图复制该对象,但该类不允许您复制(operator=和copy ctor都是隐藏的)。因此,您需要了解该类是如何使用的,并了解它为什么试图复制它。也许你不需要一个
范围的ptr
。也许您需要一个
共享的\u ptr

有时会出现奇怪的错误,这有助于预处理文件并查看输出。使用VS,在预处理器设置下查找“生成预处理文件”(或设置/P开关)。这将从XXX.cpp生成XXX.i,这可能会帮助您解决问题


确保在打开此选项后关闭开关,它将不会生成obj文件。

很好,您将问题标记为visual studio。。。否则,我敢说g++错误更容易阅读,并且常常更有效地引导您找到实际错误……我想这将是一个解决方案(尽管相当繁琐),用于设置gcc环境并重新编译那里的所有内容。对于一个较小的项目,我肯定会尝试一下。一旦你习惯了,VC++的就不会那么差了。但我确实同意一般来说g++有更好的错误消息。真正的问题是,您必须首先了解编译器试图做什么,才能了解它的故障模式。如果这一点在较新的VS版本中有所改变,我会感兴趣吗?(如果今天能有答案的话)我没有让你失望,但我确实更新了我的问题,使之更具体地说明我在寻找什么。-1:一次只考虑一个编译单元的事实并不妨碍编译器知道被指控的调用来自何方。这类错误通常是由比编译器报告的行更高级别的内容引起的。在这种情况下,源文件中导致此错误的行将是使用作用域\u ptr声明QHash实例的行。这就是模板。作用域_ptr必须违反QHash对其模板参数的假设。我刚刚有机会检查一下。我知道是哪条线路引起了问题,但是/P开关没有帮助我找出问题所在。好主意。