【问题标题】:I am not able to link 2 .cpp files with a header in visual studio我无法在 Visual Studio 中将 2 个 .cpp 文件与标题链接
【发布时间】:2015-05-04 10:29:21
【问题描述】:

我有一个文件 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.

我该怎么办?

【问题讨论】:

  • 使用标头保护:stackoverflow.com/q/4767068/992406
  • 头文件中的*v 块是什么样的?它应该只是一个声明,并且您希望在一个 cpp 文件中进行定义。

标签: visual-c++


【解决方案1】:

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

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

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

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

//--- 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”解决了这个问题。

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    相关资源
    最近更新 更多