c++ - 即使函数已经存在,C++ 未定义的函数引用错误
问题描述
我得到以下错误,
焦点//build/libfocus.a(FocusParser.o): 在函数FocusParser::parse(std::string const&)':
/builddir/project/src/Focus/FocusParser.cpp:22: undefined reference to
yyFC_scan_bytes(char const*, int)'
代码如下。如代码所示,该函数已在第 12 行定义。请帮忙。
1 #include <stdio.h>
2 #include <errno.h>
3 #include <string.h>
4
5 #include "Exception.h"
6 #include "Builder.h"
7
8 #include "FocusParser.h"
9 #include "FocusState.h"
10
11 int yyFCparse();
12 int yyFC_scan_bytes(const char *bytes, int len);
13
14 FocusStatePtr FocusParser::parse(const string &query)
15 {
16 // mutex lock for focus
17 boost::mutex::scoped_lock lock(gFocusStateMutex);
18
19 // setup parse context
20 gFocusState = FocusStatePtr(new FocusState());
21
22 yyFC_scan_bytes(query.data(), query.length());
23
24 yyFCparse();
25
26 // reset global state info
27 FocusStatePtr result = gFocusState;
28 gFocusState.reset();
29
30 return result;
31 }
解决方案
在第 12 行,您有 yyFC_scan_bytes 的声明,它基本上向编译器保证可以使用带有该签名的函数,并且它的定义将在稍后提供,可能在链接时提供。
您可能没有将您的程序与函数的有效定义链接,因此出现错误消息 - 您的编译器在您的代码中保留了一个位置,它想要调用 yyFC_scan_bytes 的实现,但您没有提供该实现,并且链接器正在抱怨这一点。
推荐阅读
- c# - 如何加快对csv导入列表的linq查询
- mysql - 根据唯一值创建列
- angular - 类型 any[] 上不存在 flatMap、flat、flatten
- c++ - 在 C 中使用 C++ 类
- android - Google 登录失败并出现错误 12500,并在其前面出现一个奇怪的日志
- python - 对 pandas 数据框矢量化方式进行排序
- ruby-on-rails - 仅当使用可验证的数据库时才检查用户是否对验证有效
- sql - Sybase SQL:“[...] where [...] '?' 在 (COLUMN_2 , COLUMN_3 , COLUMN_4)"
- php - 为什么没有在 Laravel 5.6 中删除表中的用户
- swift - NSScrollView中的NSTextView在滚动时不合作