给出下面的A.h
文件(请注意,我故意没有在这个文件中包含<iostream>
头文件)。然后,VS2010文本编辑器在std
下面显示一条红线,因为它无法识别此名称。
class A
{
public;
A() throw(std::bad_alloc);
};
但是,如果我像下面这样在A.cpp
文件中包含<iostream>
头文件,即使在关闭A.cpp
时,A.h
文件中的红线也会消失。这怎么可能呢?
#include <iostream>
#include "A.h"
A::A() { throw std::bad_alloc(); }
发布于 2012-05-03 01:23:09
添加一个包含A.h
但不包含<iostream>
的新C++文件。std
下的红色下划线将重新出现。
VS2010知道哪些文件包含该头文件。如果他们中的任何一个人不知道std
,它会指出问题所在。
但是你是对的,如果你改变了includes的顺序,使得项目不会编译,它仍然会删除红色下划线。
发布于 2012-05-03 01:49:05
Visual Studio是为所有C++程序员编写的。这意味着它不能假设头文件总是包含它们所需的所有内容。对于那些在严格的环境中工作的开发人员来说,在没有显式包含在header中的所有内容下加上红线将意味着大量的误报。在严格的环境中,header是以特定的顺序包含的,具有依赖关系。
所以Visual Studio试图弄清楚你的意思,而不是假设你的头能够独立存在。
在您的源代码中,这可能不是最佳实践,但他们必须考虑到这一点。
https://stackoverflow.com/questions/10416662
复制相似问题