gpt4 book ai didi

带有 extern "C"的两个文件出现 C++ lnk2005 错误,为什么?

转载 作者:行者123 更新时间:2023-11-28 08:07:55 25 4
gpt4 key购买 nike

我有一个带有外部“C”函数的 CPP。如果它们都在一个文件中,那么一切都很好。出于组织目的,我想将功能拆分到不同的文件中。

假设我有这两个文件:

File_One.cpp

#pragma once
#include "stdafx.h"
#include <windows.h>
#include "Functions.h"
#include "Variables.h"
#include <string>
#include "File_Two.cpp"

extern "C"
{
__declspec(dllexport) void MethodOne()
{
MethodTwo();
}
}

File_Two.cpp

#pragma once
#include "stdafx.h"
#include <windows.h>
#include "Functions.h"
#include "Variables.h"
#include <string>

extern "C"
{
__declspec(dllexport) void MethodTwo()
{
}
}

我尝试以不同的顺序重新排列我的包含 header ,甚至在 file_one.cpp 中不放置任何包含 header ,除了 file_two.cpp 的包含 header ,但我总是遇到相同的错误。

1) 错误 LNK1169:找到一个或多个多重定义的符号

2) 错误 LNK2005:_MethodTwo 已在 File_One.obj 中定义

我究竟做错了什么?我应该怎么做才能修复它?

谢谢!

最佳答案

您可能会遇到问题,因为您在 File_one.cpp 文件中包含了 File_two.cpp 文件。正在发生的事情是 File_two.cppFile_one.cpp 正在编译和链接。但是因为 File_two.cpp 包含在 File_one.cpp 中,链接器看到 MethodTwo 的两个拷贝,并且无法决定使用哪个.

您应该将声明移至 header :

File_one.h:

extern "C"
{
__declspec(dllexport) void MethodOne()
}

并将其包括在内。

File_two.h:

extern "C"
{
__declspec(dllexport) void MethodTwo();
}

然后在各自的 .cpp 文件中定义函数及其主体。源文件中不需要 extern "C"。

关于带有 extern "C"的两个文件出现 C++ lnk2005 错误,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9857825/

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