我正在制作一个包含婴儿姓名列表的程序,但我已经决定单独打开该文件的功能,这是我到目前为止所做的。
#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 ++中的流来说还不太新。
答案 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[]);
然后期望此函数的代码自动出现在某处。您必须定义并编写此函数的内容。定义此函数时,此函数中的参数必须与此处声明的参数相同。