1

我是编程新手,我目前正在处理一个太大而无法保存在单个 cpp 文件中的项目,因此我决定将其拆分为不同 cpp 文件中的组成部分。

该项目有3个cpp文件;

main.cpp、TwinCameraCapture.cpp、FaceCalibration.cpp、

代码的所有内容都在 FaceCalibration.cpp 和 TwinCameraCapture.cpp 中,main.cpp 如下所示:

#include "FaceCalibration.cpp"
#include "TwinCamCapture.cpp"

int main ()
{
    FaceCalibration();
    
    TwinCameraCapture();
}

FaceCalibration 和 TwinCameraCapture 是它们各自 .cpp 文件中的主要功能。

现在,我知道我在这里做错了什么,我只是不知道它到底是什么。我在尝试编译时遇到的错误是:

Apple Mach-O 链接器 (Id) 错误

命令 /Developer/usr/bin/llvm-g++-4.2 失败,退出代码为 1

有人可以解释我做错了什么以及如何解决它,或者给我指一个可以这样做的指南吗?

谢谢

编辑:完整的错误信息是:

    ld: duplicate symbol getWindow(cv::Rect_<int>)   in
 /Users/facebooth/Library/Developer/Xcode/DerivedData/FullProgramTest-
awrdeznffntuoacjytwewfbjdmza/Build/Intermediates/FullProgramTest.build/Debug/FullProgramTest.build/Objects-normal/x86_64/FaceCalibration.o and 
/Users/facebooth/Library/Developer/Xcode/DerivedData/FullProgramTest-
awrdeznffntuoacjytwewfbjdmza/Build/Intermediates/FullProgramTest.build/Debug/FullProgramTest.build/Objects-normal/x86_64/main.o for architecture x86_64
    Command /Developer/usr/bin/llvm-g++-4.2 failed with exit code 1
4

2 回答 2

1

通常,您不会将 .cpp 文件用作#include。您应该包含一个 .h 文件。

知道您的实际错误消息是什么会很有帮助,而不仅仅是“它失败了”,但我怀疑它是“重复的标识符”或类似的 - 因为您的 IDE 已经在编译和链接您的文件 TwincameraCapture.cpp,然后你去使那段代码成为你的主要源代码的一部分,这意味着编译器生成了两次相同的代码,并且链接器说“你的意思是其中的哪一个?” 当它看到两个名称完全相同的函数时。

于 2012-12-21T00:49:01.933 回答
0

Simply rename the .cpp file that doesn't include the main() function to a .h file and then adjust the #include appropriately and it will work. I haven't got far enough along to get to headers to know why it is like that in xCode or anything but I do know that this works.

于 2013-08-24T04:21:50.457 回答