我正在运行包含多个文件的c ++程序(2)
goofing_around.cpp
add.cpp
goofing_around.cpp:
//
// goofing_around.cpp
// new
//
// Created by Chirag Maheshwari on 14/08/18.
// Copyright © 2018 Chirag Maheshwari. All rights reserved.
//
#include <iostream>
int add(int x,int y);
int doubleNumber(int n)
{
return 2*n ;
}
int main()
{
int x;
std::cout << "Enter the number to be doubled: ";
std::cin >> x;
std::cout << doubleNumber(x)<<std::endl;
std::cout << add(3,2) << std::endl;
return 0;
}
add.cpp:
#include <iostream>
int add(int x,int y){
return x+y;
}
但是我却收到了这样的错误:
duplicate symbol _main in:
/Users/chirag/Library/Developer/Xcode/DerivedData/new-hapneuayvrpdonefrpnervwkxysx/Build/Intermediates.noindex/new.build/Debug/new.build/Objects-normal/x86_64/goofing_around-5915963FFFEE024.o
/Users/chirag/Library/Developer/Xcode/DerivedData/new-hapneuayvrpdonefrpnervwkxysx/Build/Intermediates.noindex/new.build/Debug/new.build/Objects-normal/x86_64/goofing_around-93C433489854664D.o
ld: 1 duplicate symbol for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
编辑:这很奇怪。甚至在我添加add.cpp文件之前,该错误就出现了。但是后来我删除了项目并再次尝试。然后在重写所有代码并添加了添加文件之后,我删除了。 h文件。但是只有这次才起作用,使用完全相同的代码,并包含相同的函数原型。我也不必包含add.cpp文件。 超级奇怪,但是有人知道为什么吗?
答案 0 :(得分:0)
问题是您没有很好地链接add方法。您已经在add.cpp中实现了它,但是没有在主代码中添加指向它的链接。您应该在goofing_around.cpp中添加另一个“包含”,例如
#include "add.cpp";
应该可以。
另一个观察结果:不需要在主代码中打印方法“ add”的名称,因为这些操作都是在头文件中完成的(如果有的话)。如果没有,那是没有意义的,因为您可以将主代码链接到add.cpp。