繁体   English   中英

当我有 1 个 header 用于 2.cpp 文件时,如何包含外部 header 文件?

[英]How to include an external header file when I have 1 header for 2 .cpp files?

我有一个 header 文件和两个.cpp 文件。
例如 normal.h、normal.cpp、异常.cpp。
我在两个 .cpp 文件中都包含了 header 文件。
现在我有一个外部 header,比如 external.h。 我将 external.h 包含在 normal.h 和异常.cpp 中。
但我收到链接错误。 请帮助我了解如何包含外部 header 文件。

这是我的 normal.h 代码

#pragma once
#include<iostream>
#include<external.hpp>

class normal
{
    public:
           normal();
           ~normal();
           void function();
           void Function();
 
};

normal.cpp 代码

#include"normal.h"
normal::normal(){
}
normal::~normal(){
}

异常.cpp代码

#include"normal.h"
#include<external.hpp>
void normal::function()
{
 //external library's supported function call
}

错误严重性代码 描述 项目文件行抑制 State

错误 LNK2005 "public: virtual void __cdecl external::tools::Predicate_ite::reset(void)" (?reset@Predicate_ite@tools@aff3ct@@UEAAXXZ) 已在异常.obj trial3 F:\trial3\trial3\normal 中定义.obj 1

错误 LNK2005 "public: virtual bool __cdecl external::tools::Predicate_ite::operator()(void)" (??RPredicate_ite@tools@aff3ct@@UEAA_NXZ) 已在异常.obj trial3 F:\trial3\trial3\ 中定义正常.obj 1

错误 LNK2005 "public: __cdecl external::tools::Predicate_ite::Predicate_ite(int)" (??0Predicate_ite@tools@aff3ct@@QEAA@H@Z) 已在异常.obj trial3 F:\trial3\trial3\ 中定义正常.obj 1

错误 LNK1169 发现一个或多个多重定义符号 trial3 F:\trial3\x64\Release\trial3.dll 1

将标头包含在多个代码文件中不是问题。
包含相同 header 的第二个代码文件没有任何异常。

Linker 问题可能源于执行以下操作之一:

  • 包括包含代码的标头,而不仅仅是声明、typedef、宏定义和模板类的实现
  • 这同样适用于包含代码文件
  • 将相同的 header 多次包含在同一个代码文件中(尽管在许多情况下这不是问题); 使用“标题保护”也称为“重新包含保护”( #ifndef HEADERNAME_H #define HEADERNAME_H /* content */ #endif /* HEADERNAME_H */ )可以避免这种不利影响,归功于 David C。 提出这个问题的排名; 一个特殊情况是包含 header 两次,一次包括直接,一次间接通过另一个 header (这似乎是你担心的)

Linker 问题也可能发生与 header 无关,包括,如果仅声明但未定义符号,例如当相应的库未正确添加到项目时(感谢 Ted Lyngmo 提出)。

除了 linker 问题之外的其他问题可能来自:

  • 包括具有冲突/矛盾内容的标题
  • 圆形夹杂物
  • 由于包含错误顺序的标头而导致未解决的依赖关系错误地依赖于它们的顺序

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM