假设有一个源文件un2.cpp

----un2.cpp----

class employee;
void employee::setname(string s)
{
.....(some  code)
}


雇员类在un2.h中定义,其中声明了setname()。
现在,当我尝试通过“ cc -c un2.cpp -o un2.o”编译un2.cpp时,出现一条错误消息

 un2.cpp:3:16: error: invalid use of incomplete type ‘struct employee’
 un2.cpp:1:7: error: forward declaration of ‘struct employee’


为什么编译器不只是将employee作为外部符号(就像它将使用先前声明但未定义的符号一样)并编译un2.cpp文件。

编译普通的未定义符号和未定义的类之间有什么区别吗?
还有谁能告诉我(如果可能的话)向前声明一个类并在其中定义符号的方法吗?

最佳答案

external用于链接器,并且在编译代码时无济于事,因为编译器仅通过编写前向声明就无法了解类声明。

相反,您需要在un2.cpp文件中包含带有声明的标头才能进行编译。

关于c++ - 编译包含在 header 中声明的函数的源文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11969778/

10-11 07:08