gpt4 book ai didi

c++ - 复杂错误 LNK2005 : already defined C++

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:12:18 25 4
gpt4 key购买 nike

在 Visual Studio 2008 中构建我的项目时出现 LNK2005: already defined in (...) 错误。我已经引用了其他相关问题,但我的似乎有点复杂,因为如果没有别的我正在处理的文件数量。

首先,我认为以 [current_file] ->includes_this_file 格式绘制项目文件中的#include 语句对我很有帮助

我所有的头文件都受到标准#ifndef [Header] #define [Header] ... #endif 的保护。

[调制器.h]

调制器类的原型(prototype)

[ChorusUnit.h] ->Modulator.h

具有 Modulator 类型成员对象的 Chorus 类的原型(prototype)

[AudioHandler.h] ->ChorusUnit.h

具有 Chorus 类成员对象的 AudioHandler 类的原型(prototype)

[Chorus.cpp] ->AudioHandler.h

Modulator 和 Chorus 类成员的定义

[AudioHandler.cpp] ->Chorus.cpp

AudioHandler 类成员的定义

[ChorusUnit.cpp] ->AudioHandler.cpp

包含实际运行我的项目代码的 main() 函数的文件。

include 的顺序是因为在 Modulator.h、ChorusUnit.h 和 AudioHandler.h 中找到的类的所有函数定义都需要引用其他类的成员,所以我需要首先为所有的类定义原型(prototype)类(class)见面。

该错误特别指出,在 Chorus.obj 文件的 Chorus.cpp 和 AudioHandler.cpp 中找到的每个定义都已在 AudioHandler.obj 中定义。还有另一组相同的错误类型,表示在文件 ChorusUnit.obj 中的 Chorus.cpp 和 AudioHandler.cpp 中找到的每个定义都已在 AudioHandler.obj 中定义。

可能有一个非常简单的解决方案,但我在一般链接方面并不是特别有经验(主要是 Java 程序员)。就我对这个主题的有限知识而言,我只定义了一次所有内容并且只包含一次所以我个人不知道为什么已经定义了这些。有的请赐教!

最佳答案

错误可能是您说您在 AudioHandle.cpp 中#include Chorus.cpp - 这可能不是您想要的。

原因是,所有 .cpp 文件(除非您在 IDE 中做了一些特殊的事情)都是单独编译,然后链接的。当您 #include 另一个 .cpp 文件时,该文件的文本将被逐字包含;因此,包含文件中定义的所有对象也会出现在包含文件中。当您链接这两个文件时,公共(public)对象会导致冲突。

关于c++ - 复杂错误 LNK2005 : already defined C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722932/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com