预编译头(为什么需要包含在每个源文件中)

问题描述 投票:0回答:1

我试图理解预编译头。所以我设置了以下示例项目:

pch.hpp

#include <vector>

pch.cpp

#pragma once
#include "pch.hpp"

矢量.hpp

#pragma once
#include "pch.h"

class Vector {
public:
    Vector(const size_t N, const int init);

private:
    std::vector<int> m_data;
};

矢量.cpp

#pragma once
#include "pch.hpp"
#include "Vector.hpp"

Vector::Vector(const size_t N, const int init)
    : m_data(N, init) { }

源码.cpp

#include "pch.hpp"
#include "Vector.hpp"

int main() {
    const Vector v1(3, 5);
}

我在 VS 2022 中通过将

pch.hpp
标记为 Project Properties --> C++ --> Pre-Compiled Headers --> Header File
Use (/Yu)
来完成此操作。并将
pch.cpp
设置为
Create (/Yc)

现在,当我删除

#include "pch.hpp"
Vector.cpp
中的
Source.cpp
时,我收到此错误:

File         Vector.cpp
Line         10
Severity     Error
Code         C1010
Description  unexpected end of file while looking for precompiled header.
             Did you forget to add '#include "pch.hpp"' to your source?

但是,如果我禁用预编译头,一切都会编译正常。正如人们所期望的那样。

那么,似乎在启用预编译头的情况下,我现在需要将

#include "pch.hpp"
放入每个其他源文件中?即使
#include "Vector.hpp"
已经包含
pch.hpp
?是否可以避免将
#include "pch.hpp"
放入我的所有其他源文件中?

我问,因为我有一个更大的代码库(比上面的示例),并且我认为我基本上可以用

#include <vector>
替换
#include "pch.hpp"
的所有实例并完成。但是必须将
#include "pch.hpp"
添加到众多 cpp 文件中,需要我接触很多文件(并且似乎违反直觉)。

对可能天真的问题表示歉意,因为我是预编译标头的新手。

c++ visual-studio-2022 precompiled-headers
1个回答
0
投票

通过写作来尝试 #include“pch.hpp” 在文件的顶部或在每个 cpp 文件的第一行中

© www.soinside.com 2019 - 2024. All rights reserved.