[英]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 问题可能源于执行以下操作之一:
#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.