更改参数顺序可解决链接器错误

时间:2016-05-21 16:32:04

标签: c++

我在代码中发现了一些奇怪的行为(这只是一个代码段):

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;
}

为什么这样做?

1 个答案:

答案 0 :(得分:0)

  

...,简而言之,它说“1个重复的符号,用于架构x86_64”

错误的根本原因是重复的符号。

您有两个函数定义,相同名称,相同签名。如果函数定义在标题中,则需要内联和/或使用包含保护。如果没有,如果它们是不同的功能,那么你应该选择一个不同的名称。

如果它们是相同的函数,那么将定义放在单个cpp中并将声明放在标题中。

  

我在项目的另一个文件中包含一个具有相同功能的文件。

鉴于它们是您的项目,您还可以探索名称空间来帮助解决这个问题。