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

Cru*_*ean 1 c++ visual-studio-2015

只看它是否有效(我知道它的形式很糟糕),我在头文件中完全定义了一个函数,并在主cpp文件中对该函数进行了相应的前向声明。C ++函数不需要在使用它们的转换单元中定义,因此,为什么头文件几乎完全只是前向声明(内联函数除外)。但是,当我尝试编译该项目时,它说存在未解决的外部问题。

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

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

(我正在禁用扩展名/Za,如果这有任何改变)

这是代码文件

//main.cpp
void foo();

void main()
{
    foo();
}
Run Code Online (Sandbox Code Playgroud)

和头文件

//test.h
#include <iostream>

void foo()
{
    std::cout << 'a';
}
Run Code Online (Sandbox Code Playgroud)

Nik*_*ita 5

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

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

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