LNK2005 #include .h文件在单独的.h中导致这个

时间:2017-11-08 22:58:56

标签: visual-c++

我在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. 注意:上面的代码只是我代码的一小部分代表。如果上面的代码应该编译,那么我可能会遗漏一些关键的例子

1 个答案:

答案 0 :(得分:-1)

所以它不是已定义的函数,但它实际上是一个结构。在.h文件中,有一些结构不是静态的,所以我将static关键字添加到它们的声明中,现在它可以正常工作