【问题标题】:LNK2005 error with multiple translation units多个翻译单元的 LNK2005 错误
【发布时间】:2012-08-01 07:46:35
【问题描述】:

我在写一个小的任意精度算术库,遇到了一个问题:

我的 exception.h 和 exception.cpp 中有异常类,派生自 std::exception。 Exception.h 包含在 vector.h 中,而 vector.h 又包含在 my_long.h 中。

所以问题是:当我在 main.cpp 和 my_long.cpp 中包含 my_long.h 时,我的异常类中的所有函数都会收到重定义链接器错误 LNK2005 ,这很合乎逻辑,因为我将这个类包含在两个不同的翻译单元中,然后尝试将它们链接在一起。

是否有任何可能的解决方法,或者我做错了什么?

【问题讨论】:

  • 能否提供 exception.h 和 .cpp 以及确切的错误消息?
  • 头文件应该只包含声明,而不是定义。如果exception.h 文件不大,您应该编辑您的问题以包含它。还将错误消息逐字添加到您的问题中。
  • 也许,你的类定义依赖于一些宏,这些宏在一些翻译单元中定义,但在其他翻译单元中没有定义。请显示一些代码和确切的错误消息。
  • 在 .h 文件中使用 inline 关键字定义函数。

标签: c++ visual-studio linker


【解决方案1】:

你有两个选择。您可以将 my_long.h 中的所有函数标记为内联,这允许多个相同的定义,或者您可以将函数定义移动到 my_long.cpp 并在 my_long.h 中为它们提出声明。

通常,为了保持头文件的可读性,除了非常小的函数之外,您应该执行第二个操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    相关资源
    最近更新 更多