gpt4 book ai didi

c++ - 头文件是否未编译(C++ Visual Studio 2015)

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:18 27 4
gpt4 key购买 nike

只是为了看看它是否可行(我知道它的形式很糟糕),我在头文件中完全定义了一个函数,并在主 cpp 文件中为所述函数做了相应的前向声明。 C++ 函数不需要在它们使用的翻译单元中定义,因此头文件几乎完全只是前向声明(内联函数除外)。然而,当我试图编译这个项目时,它说有 Unresolved external 问题。

当我将头文件的全部内容移动到源文件中(同时删除头文件)时,它编译得很好并按预期执行。那么,是在构建项目时没有编译头文件,还是只是存在一些我不知道的异常?

此外,即使我只是在属性资源管理器中转到头文件的属性并将其 File Type 设置为 C/C++ Code 并将其扩展名更改为 .cpp ,它仍然不会编译(即使我只是删除它并创建一个新的源文件它会编译,我认为这是最奇怪的部分)。

(我正在使用禁用的扩展 /Za,如果有任何变化的话)

这是代码文件

//main.cpp
void foo();

void main()
{
foo();
}

和头文件

//test.h
#include <iostream>

void foo()
{
std::cout << 'a';
}

最佳答案

头文件由预处理器包含到编译单元 - cpp 文件中。之后只有cpp文件中的源代码被编译器编译。

当您将函数定义放入 header .h 文件时。您没有将此头文件包含到 main.cpp 中,并且编译器不会编译它,因为预处理器没有将它包含在 main.cpp 中。

您可以自行查看预处理器作业的结果。在 Visual Studio 中,使用 Preprocessor 上的 /P 选项属性页。对于 main.cpp 输出将在 main.i 中。

关于c++ - 头文件是否未编译(C++ Visual Studio 2015),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40775145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com