假设我有一个名为 Class
:
Class.h
#pragma once
class Class
{
public:
std::vector<int> x();
};
Class.cpp
#include <vector>
#include "Class.h"
std::vector<int> Class::x()
{
return std::vector<int>();
}
我想,这段代码不应该被编译,因为 std::vector
中没有定义 Class.h
. 但代码可以工作。如果我包含了所需的头文件(在本例中只有 vector
)后,包括 Class.h
. 但是,只要在加入 Class.h
一切都很正常。此外,如果我尝试包含以下内容,它也不能正常工作 Class.h
某个单独的地方,并尝试使用它。所以,比如这段代码就不能用。
#include <iostream>
#include "Class.h"
int main()
{
Class c;
auto x = c.x();
x.push_back(1);
x.push_back(2);
x.push_back(3);
for (auto i : x)
std::cout << i << ' ';
}
但如果我加入了所需的头文件,它就能正常工作。所以在这个例子中,如果我在其中加入了 vector
头部(也必须在包含的 Class.h
):
#include <vector>
#include "Class.h"
#include <iostream>
int main()
{
Class c;
auto x = c.x();
x.push_back(1);
x.push_back(2);
x.push_back(3);
for (auto i : x)
std::cout << i << ' ';
}
我在想 #include
因为只是复制粘贴。在 Class.h
,没有包含头。怎么可能说这个函数会返回一个 std::vector
而没有定义它?而为什么在源文件中包含头文件,就会让它像包含在头文件中一样?
你不编译 Class.h
你编译的cpp文件 #include
s Class.h
.
如果你在 Class.h
在 main.cpp
然后,经过预处理步骤,你的 main.cpp
文件的内容将有 vector
头,然后是 Class.h
,后面是其他代码 main.cpp
. 所以 vector
将在 Class
.
如果你只编译了 Class.h
头文件,你会得到一个错误。我建议你总是这样做,以检查你的头文件是否有所有必要的头文件,并能在不依赖副作用的情况下进行编译。