gpt4 book ai didi

c++ - 链接两个目标文件时,#ifndef 会阻止定义一个函数两次吗?

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:31 24 4
gpt4 key购买 nike

我有两个类实现(.cpp 文件)

它们都需要一个在header(.h) 文件中实现的函数。这两个 .cpp 文件都包含 .h 文件。编译后,两个.cpp文件变成两个.o文件。

链接两个目标文件时函数是否定义了两次?

#ifndef 可以防止这种情况吗?

我使用了 #ifndef 但我收到了以下消息,

ld: 1 duplicate symbol for architecture x86_64

最佳答案

您必须了解函数声明(具有给定名称和签名的函数存在的声明)和函数定义(确定什么的代码该功能实际上确实如此)。

如果你在头文件中定义函数,那么这个函数将在每个目标文件中定义,当你试图将它们链接在一起时会发生冲突; #ifndef 不会解决这个问题。

如果你在头文件中声明函数,并在源文件中定义它就不会出现这样的问题(必须编译成一个对象,并链接与使用它的对象)。在这个简单的例子中,不需要 #ifndef

例如,函数foo可以在foo.h中声明:

int foo(int);

并在foo.cpp中定义:

int foo(int n)
{
return(n+3);
}

#ifndef 宏解决了一个不同的问题。

关于c++ - 链接两个目标文件时,#ifndef 会阻止定义一个函数两次吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16205449/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com