只是为了测试是否可行(我知道这种做法很糟糕),我在头文件中完全定义了一个函数,并在主cpp文件中进行了相应的前向声明。C ++函数不需要在它们被使用的翻译单元中进行定义,因此头文件几乎完全只包含前向声明(除了内联函数)。但是,当我尝试编译这个项目时,它说有未解决的外部引用。
当我将头文件的全部内容移到源文件中(同时删除头文件),它就可以编译并按预期执行。那么,头文件在构建项目时就不能被编译吗,还是有一些我不知道的例外?
此外,即使我只是在属性浏览器中转到头文件的属性并将其“文件类型”设置为“C / C ++代码”,并将其扩展名更改为.cpp,它仍然无法编译(即使如果我只是删除它并创建一个新的源文件,它仍然可以编译,我认为这是最奇怪的部分)。
(我正在使用禁用扩展/Za,如果有变化,请注意)
以下是代码文件:
当我将头文件的全部内容移到源文件中(同时删除头文件),它就可以编译并按预期执行。那么,头文件在构建项目时就不能被编译吗,还是有一些我不知道的例外?
此外,即使我只是在属性浏览器中转到头文件的属性并将其“文件类型”设置为“C / C ++代码”,并将其扩展名更改为.cpp,它仍然无法编译(即使如果我只是删除它并创建一个新的源文件,它仍然可以编译,我认为这是最奇怪的部分)。
(我正在使用禁用扩展/Za,如果有变化,请注意)
以下是代码文件:
//main.cpp
void foo();
void main()
{
foo();
}
以及头文件
//test.h
#include <iostream>
void foo()
{
std::cout << 'a';
}
#include
预处理将其引入到翻译单元中,否则头文件不会被编译。由于您唯一的 .cpp 文件没有这样的包含,它不会被编译,因此其中的任何内容对该翻译单元(显然是您唯一的翻译单元)都不可用。 - WhozCraig