.txt函数没有链接到main函数

时间:2016-09-15 01:19:41

标签: c++ function

我正在制作一个包含婴儿姓名列表的程序,但我已经决定单独打开该文件的功能,这是我到目前为止所做的。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;


void open_file(ifstream& in, char fileName[]);
void find_name(ifstream& in, string name, int numNames);



int main() {

    const int NUMNAMES = 1000;
    ifstream inStream;
    char fileName[30];
    string name;
    cout << "Enter the name of the file that contains the names: " << endl;
    open_file(inStream, fileName);
    cout << "Enter the name to search for (capitalize first letter): " << endl;
    cin >> name;
    find_name(inStream, name, NUMNAMES);
    inStream.close();

}


void open_file(ifstream& ) {

    string line;
    ifstream myfile ("babyNames.txt");
    if (myfile.is_open())
    {
        while ( getline (myfile,line) )
        {
            cout << line << '\n';
        }
        myfile.close();
    }

    else cout << "I/O failure opening file babyNames";


}

有谁知道为什么我收到这么多错误信息:

Undefined symbols for architecture x86_64:
  "find_name(std::__1::basic_ifstream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, int)", referenced from:
      _main in Untitled-1b6d2e.o
  "open_file(std::__1::basic_ifstream<char, std::__1::char_traits<char> >&, char*)", referenced from:
      _main in Untitled-1b6d2e.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有谁知道我做错了什么,我觉得它相对接近我对c ++中的流来说还不太新。

1 个答案:

答案 0 :(得分:0)

显示的代码声明并调用以下函数:

void open_file(ifstream& in, char fileName[]);
void find_name(ifstream& in, string name, int numNames);

不幸的是,显示的代码没有定义这两个函数中的任何一个,并且两个链接错误就是结果。

显示的代码确实定义了一些也称为open_file()的函数,但它是一个完全不同的函数,因为它需要不同的参数。显示的代码未定义任何名为find_name()的函数。

您不能简单地声明如下函数:

void open_file(ifstream& in, char fileName[]);

然后期望此函数的代码自动出现在某处。您必须定义并编写此函数的内容。定义此函数时,此函数中的参数必须与此处声明的参数相同。