我有一个带有外部“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()
{
}
}
我尝试以不同的顺序重新排列我的include标头,甚至在file_one.cpp中没有包含标题而不包括file_two.cpp的包含但是我总是得到相同的错误。
1)错误LNK1169:找到一个或多个多重定义的符号
2)错误LNK2005:_MethodTwo已在File_One.obj中定义
我究竟做错了什么? 我该怎么做才能解决它?
谢谢!
答案 0 :(得分:1)
您可能遇到问题,因为您在File_two.cpp
文件中包含File_one.cpp
文件。发生的事情是File_two.cpp
和File_one.cpp
正在编译和链接。但由于File_two.cpp
中包含File_one.cpp
,链接器会看到MethodTwo
的两个副本,无法决定使用哪个。
您应该将声明移到标题:
File_two.h:
extern "C"
{
__declspec(dllexport) void MethodOne()
}
而是包括它。
File_one.h:
extern "C"
{
__declspec(dllexport) void MethodOne();
}
然后在各自的.cpp
文件中定义函数及其主体。源文件中不需要extern“C”。