我有一个带有外部“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()
{
}
}
我试过以不同的顺序重新排列包含头,甚至在file_one.cpp中除了file_two.cpp的包含头之外不放置任何包含头,但我总是得到相同的错误。
1)错误LNK 1169:找到一个或多个多重定义的符号
2)错误LNK 2005:_MethodTwo已在File_One.obj中定义
我到底做错了什么?我该怎么做才能弥补?
谢谢大家!
1条答案
按热度按时间qfe3c7zg1#
您可能遇到了问题,因为您将
File_two.cpp
文件包含在File_one.cpp
文件中。发生的情况是File_two.cpp
和File_one.cpp
正在被编译和链接。但由于File_two.cpp
包含在File_one.cpp
中,链接器看到MethodTwo
的两个副本,无法决定使用哪个。您应该将声明移到标题中:
File_one.h:
把它也包括进去。
File_two.h:
然后在各自的
.cpp
文件中定义函数和函数体,不需要在源文件中使用extern“C”。