如何解决使用多个.cpp文件时调用函数
当我调用内联函数时,我想问一个关于输出的问题,该函数是在MyHeader.h
和source_1.cpp
文件中使用{ source_2.cpp
文件中的int main()
函数。
当我进行这样的调用时,将调用source_2.cpp
函数内部定义的那个。代码就像;
我的source_1.cpp
包含以下代码行:
MyHeader.h
我的#pragma once
#include <iostream>
inline int func(void);
包含以下代码行:
source_1.cpp
我的#include "MyHeader.h"
int func(void)
{
std::cout << "func(),inside source_1,was called. 102 * 102 will be returned." << "\n";
return 102 * 102;
}
void source_1(void)
{
std::cout << "source_1() was called. func() will be called." << "\n";
func();
}
包含以下代码行:
source_2.cpp
这是输出:
#include "MyHeader.h"
int func(void)
{
std::cout << "func(),inside source_2,was called. 102 * 102 will be returned." << "\n";
return 102 * 102;
}
void source_2(void)
{
std::cout << "source_2() was called. func() will be called." << "\n";
func();
}
int main()
{
std::cout << "main() was called." << "\n";
source_2();
}
我想知道原因。
解决方法
您违反了one definition rule。不允许在程序中使用不同的实现的非静态对象。编译器/链接器可以自由选择找到的任何实现,这可能会导致很难发现错误。
,您的source_2
函数称为func
的{{1}}函数,因为source_1.cpp
被声明为func
,而不是inline
。链接器获得static
函数时,它将删除该函数的所有副本(一个除外)。因此,将保留inline
的{{1}}函数,而其他函数将被链接器删除。如果要在两个源文件中对一个函数进行两个单独的实现,请将函数声明为func
。这样可以防止链接程序删除具有相同名称的多个功能。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。