复杂错误LNK2005:已经定义了C++

Ric*_*ich 1 c++ linker visual-studio-2008

我正在获取LNK2005:在Visual Studio 2008中构建我的项目时已经在(...)错误中定义了.我引用了其他相关问题,但是我觉得有点复杂,因为如果没有别的话我正在使用的文件.

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

我的所有头文件都使用标准的#ifndef [Header] #define [Header] ... #endif.

[Modulator.h]

Modulator类的原型

[ChorusUnit.h] - > Modulator.h

合唱类的原型,其成员对象类型为Modulator

[AudioHandler.h] - > ChorusUnit.h

AudioHandler类的原型,它具有Chorus类的成员对象

[Chorus.cpp] - > AudioHandler.h

调制器和合唱类成员的定义

[AudioHandler.cpp] - > Chorus.cpp

AudioHandler类成员的定义

[ChorusUnit.cpp] - > AudioHandler.cpp

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

包含的顺序是因为在Modulator.h,ChorusUnit.h和AudioHandler.h中找到的类的函数的所有定义都需要引用其他类的成员,所以我需要首先为所有类定义的原型才能看到彼此.

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

可能有一个非常直接的解决方案,但我并不是特别经验(主要是Java程序员).至于我对这个问题的有限知识,我只定义了一次,所有内容都只包含一次,所以我个人不知道为什么这些已经定义了.有些请赐教!

jpa*_*cek 9

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

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