use*_*693 2 c++ linker object-files
我有两个类实现(.cpp files)
它们都需要一个在header(.h)文件中实现的功能.两个.cpp文件都包含.h文件.编译后,这两个.cpp文件成为两个.o文件.
链接两个目标文件时,是否定义了两次函数?
可以#ifndef防止这种情况吗?
我用过,#ifndef但收到了以下消息:
ld: 1 duplicate symbol for architecture x86_64
Run Code Online (Sandbox Code Playgroud)
您必须理解函数声明(具有给定名称和签名的函数的语句)和函数定义(确定函数实际执行的代码)之间的区别.
如果在标题中定义函数,那么将在每个目标文件中定义该函数,当您尝试将它们链接在一起时,您将遇到冲突; #ifndef不会解决这个问题.
如果在头文件中声明函数,并在源文件中定义它(必须将其编译为对象,并与使用它的对象链接),则不会出现此类问题.在这种简单的情况下,#ifndef不需要.
例如,函数foo可以在foo.h:
int foo(int);
Run Code Online (Sandbox Code Playgroud)
并定义于foo.cpp:
int foo(int n)
{
return(n+3);
}
Run Code Online (Sandbox Code Playgroud)
该#ifndef宏解决不同的问题.