【发布时间】:2016-11-23 22:25:04
【问题描述】:
只是为了看看它是否可以工作(我知道它的形式很糟糕),我在头文件中完全定义了一个函数,并在主 cpp 文件中为所述函数做出了相应的前向声明。 C++ 函数不需要在它们使用的翻译单元中定义,因此为什么头文件几乎完全只是前向声明(内联函数除外)。但是,当我尝试编译这个项目时,它说有未解决的外部。
当我将头文件的全部内容移动到源文件中时(也删除了头文件),它编译得很好并按预期执行。那么,是不是在构建项目时只是没有编译头文件,还是只是有一些我不知道的异常?
此外,即使我只是在属性资源管理器中转到头文件的属性并将其 File Type 设置为 C/C++ Code 并将其扩展名更改为 .cpp,它仍然无法编译(即使如果我只需删除它并创建一个新的源文件,我认为这是最奇怪的部分)。
(我正在使用已禁用的扩展程序 /Za,如果这有任何改变)
这是代码文件
//main.cpp
void foo();
void main()
{
foo();
}
还有头文件
//test.h
#include <iostream>
void foo()
{
std::cout << 'a';
}
【问题讨论】:
-
除非通过
#include预处理将头文件拉入翻译单元,否则不会编译头文件。由于您唯一的 .cpp 文件没有此类包含,因此未编译它,因此该(显然是您唯一的)翻译单元无法使用其中的任何内容。