错误LNK2019:由于帮助程序库导致的未解析的外部符号

时间:2012-06-12 20:24:15

标签: c++ lnk2019

我认为问题在于我的CS课程中使用的辅助库中包含的函数ConvertToUpperCase。我正在尝试为我的实验写一些东西,但是我学习了帮助库 - 所以如果没有它我就不知道该怎么办。

完整错误错误:

  

LNK2019:未解析的外部符号“class std :: basic_string,class std :: allocator> __cdecl ConvertToUpperCase(class std :: basic_string,class std :: allocator>)”(?ConvertToUpperCase @@ YA?AV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@ V12 @@ Z)在函数“public:bool __thiscall Lexicon :: containsPrefix(class std :: basic_string,class)”中引用std :: allocator>)“(?containsPrefix @ Lexicon @@ QAE_NV?$ basic_string @ DU?$ char_traits @ D @ std @@ V?$ allocator @ D @ 2 @@ std @@@ Z)

该功能包含在strutils.h中并解释了here

示例代码:

#include "stdafx.h"
#include <cstdlib>
#include <string>
#include <iostream>
#include <set>
#include <fstream>
#include "genlib.h"
#include "strutils.h"
#include "simpio.h"
#include "set.h"
#include "lexicon.h"

using namespace std;

/* Function: AddWord1
* -----------------
* This function prompts the user for a code and then
* coverts entry to upper case and adds this word to the code list passed in.
*/
void AddWord1(Lexicon & lex)
{
    cout << "Please enter activity code to add: ";
    string word = ConvertToUpperCase(GetLine()); //may need to remove for code
    lex.add(word);
    cout << word << " added to code list." << endl;
}

澄清:

  • 是的,这是2009年和2010年的工作代码 - 所以它已经实施。
  • 该库是.lib,我现在正在使用sourceForge version
  • VS 2008,它最后是从VS2005编译工作,我试过VS2005和VS2011BETA但仍然有错误。
  • 我正在尝试确保将适当的cpp文件添加到项目中;我认为他们是。我的genlib.cpp是2011年的日期,不同于适用于Linux用户的github.com/b33tr00t/cs106lib版本,因此有一些区别是有意义的。

2 个答案:

答案 0 :(得分:1)

应该有一个包含已编译代码的库以及您拥有的标头。您需要将该库(.lib或.obj文件)添加到项目中 - 特别是您需要将其包含在链接器设置中。

如果您没有,那么您可能有一个或多个定义这些功能的C ++源文件 - 您可以将它们添加到项目中。

如果你没有这些,那么你有问题,我很害怕。

答案 1 :(得分:0)

如果您不再访问该库(因为您可能不再在该课程中),您可以使用this question中的一种技术编写自己的ConvertToUpperCase函数。< / p>