我在Visual Studio 2017中的C ++ / CLI项目中用C ++编写。我有第三方c库,我们称之为lib.h.我在这个项目中有2个.h文件和2个.cpp文件,我正在尝试创建一个DLL。让我们称他们为A和B.
//A.h
#pragma once
#ifndef INC_A
#define INC_A
extern "C"
{
#include "lib.h"
}
class A {};
#endif
//A.cpp
#include "stdafx.h"
#include "A.h"
//B.h
#pragma once
#ifndef INC_B
#define INC_B
extern "C"
{
#include "lib.h"
}
class B {};
#endif
//B.cpp
#include "stdafx.h"
#include "B.h"
尝试这样做会引发错误LNK2005:
function already defined in A.obj File: B.obj
我已经尝试在#include lib.h周围添加一个#ifndef但它不起作用(我认为因为编译的每个cpp文件是相互独立的)
将两个.cpp文件和.h文件合并在一起可能会有效,但我不想这样做。
最后我想从A中引用B,但在解决此问题之前不能这样做。顺便说一句,我根本无法更改lib.h. 注意:上面的代码只是我代码的一小部分代表。如果上面的代码应该编译,那么我可能会遗漏一些关键的例子
答案 0 :(得分:-1)
所以它不是已定义的函数,但它实际上是一个结构。在.h文件中,有一些结构不是静态的,所以我将static关键字添加到它们的声明中,现在它可以正常工作