我现在有点困惑,因为我计划在我的一个项目中首次包含多个源文件和头文件。
所以我想知道这是否是正确的做法?
我是否必须在每个直接使用它的源文件中包含字符串标题?
那么" stdafx.hpp" Visual C ++希望我包含的标题?
这会是要走的路吗?
的main.cpp
#include "stdafx.hpp"
#include <string> //?
#include <stringLib1.h>
#include <stringLib2.h>
using std::string;
//use a windows.h function here
//use a stringLib1 function here
//use a stringLib2 function here
stringLib1.h
#include "stdafx.hpp"
#include <string>
using std::string;
class uselessClass1
{
public:
string GetStringBack1(string myString);
};
stringLib1.cpp
#include "stdafx.hpp"
string uselessClass1::GetStringBack1(string myString) {
return myString;
}
stringLib2.h
#include "stdafx.hpp"
#include <string>
using std::string;
class uselessClass2
{
public:
string GetStringBack2(string myString);
};
stringLib2.cpp
#include "stdafx.hpp"
string uselessClass2::GetStringBack2(string myString) {
return myString;
}
答案 0 :(得分:4)
一个好的做法通常是只包含代码在每个文件中使用的内容。这减少了对其他头文件的依赖性,并且在大型项目上减少了编译时间(并且还有助于找出取决于什么的内容)
在标题文件中使用include guards
不要通过polluting全局命名空间导入所有内容,例如
using namespace std;
您的项目unless you're using precompiled headers中不需要stdafx.h
。您可以在VS项目属性中控制此行为( C / C ++ - &gt;预编译标题 - &gt;预编译标题)
答案 1 :(得分:3)
如果在VS中启用了预编译标头,则需要stdafx.h
标头。 (Read this one)
您只需要在stdafx.h
文件中加入.cpp
作为第一个包含。
关于header和cpp文件(成对出现),在头文件中包含声明所需的内容,并在cpp中包含其他所有内容(定义所必需的)。还包括其cpp对中的相应标头。并使用include guards。
<强> myclass.h 强>
#ifndef MYCLASS_H // This is the include guard macro
#define MYCLASS_H
#include <string>
using namespace std;
class MyClass {
private:
string myString;
public:
MyClass(string s) {myString = s;}
string getString(void) {return myString;}
void generate();
}
<强> myclass.cpp 强>
#include <stdafx.h> // VS: Precompiled Header
// Include the header pair
#include "myclass.h" // With this one <string> gets included too
// Other stuff used internally
#include <vector>
#include <iostream>
void MyClass::generate() {
vector<string> myRandomStrings;
...
cout << "Done\n";
}
#endif
然后在main(...)
中,您可以添加myclass.h
并调用generate()
函数。
答案 2 :(得分:0)
stdafx include应该位于每个.cpp文件的顶部,它不应该在.h文件中。 你可以把#include&lt;字符串&gt;在stdafx.h中,如果你不想把它放在每个其他文件中。
答案 3 :(得分:-1)
我认为您必须拥有自己的头文件,这可能是其他cpp文件和头文件中可能需要的。就像你给的那个
#include <stringLib1.h>
#include <stringLib2.h>
在我看来,最好创建一个通用头文件,其中包含所有公共库头文件和项目头文件。然后,您可以在此文件中包含所有其他cpp文件和头文件。而且最好还使用标题保护。
因此,考虑一个公共头文件&#34; includes.h&#34;。
#ifndef INCLUDES_H
#define INCLUDES_H
#include <string>
#include <stringLib1.h>
#include <stringLib2.h>
/***Header files***/
#endif //INCLUDES_H
这是您常用的头文件。这可以包含在所有项目文件中。