首页 > 解决方案 > 即使函数已经存在,C++ 未定义的函数引用错误

问题描述

我得到以下错误,

焦点//build/libfocus.a(FocusParser.o): 在函数FocusParser::parse(std::string const&)': /builddir/project/src/Focus/FocusParser.cpp:22: undefined reference toyyFC_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 }

标签: c++undefined-reference

解决方案


在第 12 行,您有 yyFC_scan_bytes 的声明,它基本上向编译器保证可以使用带有该签名的函数,并且它的定义将在稍后提供,可能在链接时提供。

您可能没有将您的程序与函数的有效定义链接,因此出现错误消息 - 您的编译器在您的代码中保留了一个位置,它想要调用 yyFC_scan_bytes 的实现,但您没有提供该实现,并且链接器正在抱怨这一点。


推荐阅读