【发布时间】:2017-05-30 08:49:55
【问题描述】:
在寻找有关包含顺序的最佳实践时,我偶然发现了这个线程:
C/C++ include file order/best practices [closed]
@squelart 表示,从本地包含到全局是更好的做法,因为这减少了隐藏依赖项的机会。我刚刚在一个 VS2015 项目中测试了这个,代码如下:
StrTest.h
#pragma once
class CStrTest
{
public:
CStrTest();
~CStrTest();
std::string test;
};
StrTest.cpp
#include <string>
#include "StrTest.h"
CStrTest::CStrTest()
{
}
CStrTest::~CStrTest()
{
}
我无法重现所述行为(隐藏的依赖二重奏,包括 StrTest.cpp 中的第一个字符串)。编译器给了我多个错误。那么这是过去的事情还是我忽略了什么?
编辑:VS2015 编译器错误:
错误 C4430 缺少类型说明符 - 假定为 int。注意:C++ 不支持 default-int
错误 C2039 'string': is not a member of 'std'
错误 C3646 'test':未知的覆盖说明符
【问题讨论】:
-
不清楚你在这里问什么 - 上面的代码编译。
-
您实际上正在做与 squelart 答案建议相反的事情。
-
您还需要在
StrTest.h中包含或至少转发声明std::string。你的头文件应该是自包含的。 -
@VTT 据我了解,这是 YokeM 的观点。他们正试图做相反的事情并通过隐式依赖重现问题 - 即即使不满足标头的所有依赖关系也能编译的程序。根据 YokeM 的说法,这个问题在 VS2015 中没有重现,它“给出了多个错误”。
-
@user2079303:谢谢,这就是我的意思。我还添加了 VS2015 编译器错误。
标签: c++ include dependencies