我无法在Visual Studio中将2个.cpp文件与标题链接起来

时间:2015-05-04 10:29:22

标签: visual-c++

我有一个文件p2.cpp和2d.cpp,我正在尝试与2d.h链接。 我在两个.cpp文件中都包含了2d.h,我收到了一个错误:

2d.obj : error LNK2005: "float (* v)[3]" (?v@@3PAY02MA) already defined in p2.obj
1: fatal error LNK1169: one or more multiply defined symbols found.

我该怎么办?

1 个答案:

答案 0 :(得分:0)

  

我有一个文件p2.cpp和2d.cpp,我试图与2d.h链接。一世   在.cpp文件中包含2d.h并且我收到错误:

每个符号只能在程序(refer One definition rule)中定义一次。我不确定你的头文件是什么样的,但通常这意味着在你的头文件中定义一些包含在多个编译单元中的内容。你可以" extern"它在你的标题中,并确保它是在一个单独的编译中联合定义的。

从编译器错误看起来您已经在头文件中定义了函数指针数组。 Extern,并在源文件中提供单个定义。

此代码有效地导致了问题:

//--- Def.h
#ifndef DEF_H
#define DEF_H

float foo();

/*extern */float (*floatFunctionArray[3])();

#endif  /* DEF_H */

//--- Def.cpp
#include "Def.h"

float foo()
{
   return 0;
}

float (*floatFunctionArray[3])() =
{
   foo, foo, foo
};

//--- main.cpp
#include "Def.h"

int
main(int argc, char** argv)
{
   return 0;
}

添加注释掉的" extern"解决了这个问题。