所以这是我正在使用的代码。我希望能够将所有输入传递给此函数new_flight
,其中当前没有其他代码的空代码。我正在尝试通过引用传递令牌,但我已尝试使用*
&
并且仅使用值,并且似乎都没有。
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
void new_flight( vector<string> &tokens );
int main( int argc, char *argv[] )
{
vector<string> tokens;
cout << "Reservations >> ";
getline(cin, input);
istringstream iss( input );
copy(istream_iterator<string>( iss ),
istream_iterator<string>(),
back_inserter<vector<string> > ( tokens ));
new_flight( tokens );
}
以下是编译器告诉我的内容
Undefined symbols for architecture x86_64:
"new_flight(std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&)", referenced from:
_main in ccplPBEo.o
ld: symbol(s) not found for architecture x86_64
collect2: ld returned 1 exit status
如果我注释掉我实际将标记传递给new_flight new_flight( tokens )
的行,它编译得很好。
谢谢你看看
答案 0 :(得分:2)
您获得的不是编译器错误,而是链接器错误,这是因为您的函数new_flight()
未定义。但你似乎意识到了这个事实。如果调用未定义的函数,则无法期望程序正常工作,因此链接器首先拒绝创建它。
答案 1 :(得分:2)
您正在声明函数new_flight
,但没有定义它,因此链接器无法链接它。编写实现(如果只是一个存根),它将编译。
答案 2 :(得分:2)
为了存根函数,您需要提供函数定义,而不是函数声明:
void new_flight( vector<string> &tokens ) {
// Not implemented
}
答案 3 :(得分:1)
您不能致电声明。你需要一个定义。编译器应该为此调用生成什么代码?它没有该功能的代码。你的程序无法编译。
答案 4 :(得分:0)
正如其他帖子所指出的那样:
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <iterator>
using namespace std;
void new_flight( vector<string> &tokens );
int main( int argc, char *argv[] )
{
vector<string> tokens;
cout << "Reservations >> ";
getline(cin, input);
istringstream iss( input );
copy(istream_iterator<string>( iss ),
istream_iterator<string>(),
back_inserter<vector<string> > ( tokens ));
new_flight( tokens );
}
void new_flight( vector<string> &tokens )
{
// implementation
}
因为你实际上是在main之后定义了这个功能,所以编译器需要知道函数存在,因此我们创建了一个定义函数的“prototype”void new_flight( vector<string> &tokens );
。