我在代码中发现了一些奇怪的行为(这只是一个代码段):
void StringSplit(string b,char splitchar,vector<string>& a) {}
int main(int argc, const char * argv[]) {
// insert code here...
string b;
getline(cin, b);
vector<string> result1;
StringSplit(b, ' ', result1);
std::cout << result1[0];
return 0;
}
编译时,我得到 Linker command failed with exit code 1
,但没有看到任何错误。
然后我随机更改StringSplit
参数的顺序,错误已修复:
void StringSplit(char splitchar,string b,vector<string>& a) {}
int main(int argc, const char * argv[]) {
// insert code here...
string b;
getline(cin, b);
vector<string> result1;
StringSplit(' ', b, result1);
std::cout << result1[0];
return 0;
}
为什么这样做?
答案 0 :(得分:0)
...,简而言之,它说“1个重复的符号,用于架构x86_64”
错误的根本原因是重复的符号。
您有两个函数定义,相同名称,相同签名。如果函数定义在标题中,则需要内联和/或使用包含保护。如果没有,如果它们是不同的功能,那么你应该选择一个不同的名称。
如果它们是相同的函数,那么将定义放在单个cpp中并将声明放在标题中。
我在项目的另一个文件中包含一个具有相同功能的文件。
鉴于它们是您的项目,您还可以探索名称空间来帮助解决这个问题。