函数的多个定义

时间:2014-02-10 15:12:58

标签: c++ string c++11

我一直收到这个错误 /tmp/ccKGPdrx.o:在函数FindWords(std::string)': app2.cpp:(.text+0x0): multiple definition of FindWords(std :: string)' /tmp/ccDIMHPc.o:main.cpp:(.text+0x0):首先在这里定义 collect2:错误:ld返回1退出状态

我的app2.cpp文件

#include <fstream>
#include <iostream>

std::string FindWords(std::string str)
{
    std::ifstream iFile("in.txt");  
    std::string x;
   while (true) {
    iFile >> x;
    if (x.compare(0,str.size(),str) == 0) {
        std::cout << x;
    }
    if( iFile.eof() ) break;
    }
    return x;
}

我的主文件

#include <iostream>
#include "app2.cpp"
#include <fstream>

int main() {
    std::string s = FindWords("cha");
    return 0;
}

这只是一个简单的代码,它从文件中读取字符串并获取字符串作为输入。如果文件中的任何字符串与输入字符串匹配,则打印它。

2 个答案:

答案 0 :(得分:2)

这是因为这一行:

#include "app2.cpp"

您不应该包含该课程的cpp文件。相反,您应该链接它,并包括标题:

app2.h

#include <string>
std::string FindWords(std::string str);

答案 1 :(得分:0)

错误的原因是您在带有main的模块中包含了模块 app2.cpp 。因此编译了这两个模块,并且有两个相同功能的定义。

您应该在某个标头中声明该函数,并在模块app2.cpp中保留其定义,并在两个模块中包含此标头。

考虑到该功能的代码无效。它不会被编译,因为没有一个右括号。此外,它将返回最后一个读取的字符串,而不是带有 str

的字符串