error LNK2019: símbolo externo no resuelto debido a la biblioteca auxiliar

Creo que el problema es con una función. ConvertToUpperCase incluido en una biblioteca de ayuda utilizada en mi curso de CS. Estoy tratando de escribir algo para mi experimento, pero aprendí con la biblioteca auxiliar, así que no sé qué hacer sin ella.

El error de error completo:

LNK2019: símbolo externo no resuelto "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) referenciado en la función "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)

La función está incluida en strutils.h y explicado aquí

Código de muestra:

#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;
}

Aclaración:

  • sí, este era un código de trabajo en 2009 y 2010, por lo que se implementó.
  • la biblioteca era un .lib y ahora estoy usando el versión de sourceForge.
  • VS 2008, la última vez que funcionó fue una compilación de VS2005, probé VS2005 y VS2011BETA pero todavía tengo errores.
  • Estoy tratando de asegurarme de que se agreguen los archivos cpp apropiados al proyecto; creo que lo son Mi genlib.cpp tiene fecha de 2011 y es diferente a la versión github.com/b33tr00t/cs106lib, que es para usuarios de Linux, por lo que tiene sentido que haya algunas diferencias.

preguntado el 12 de junio de 12 a las 21:06

¿Alguna vez lo implementó (es decir, le dio un cuerpo a la función)? -

¿El profesor te dio el código fuente o la biblioteca compilada? ¿En que plataforma Estas tu? ¿Cuál es el compilador que estás usando? -

interesante encontre esto github.com/b33tr00t/cs106lib, aún asegúrese de haber agregado los archivos cpp apropiados a su proyecto y se está compilando, suponiendo que esté en Windows usando VS. -

Editaré mi publicación para aclarar:

2 Respuestas

Debe haber una biblioteca que contenga el código compilado, así como el encabezado que tiene. Debe agregar esa biblioteca (un archivo .lib o .obj) a su proyecto; específicamente, debe incluirla en la configuración del vinculador.

Si no tiene eso, es posible que tenga uno o más archivos fuente de C ++ que definan esas funciones; podría agregarlos al proyecto.

Si no tienes ninguno de esos entonces tienes un problema, me temo.

Respondido el 12 de junio de 12 a las 21:06

Tengo los archivos fuente de C++ en la misma carpeta que el proyecto, no se agregan ya que producen muchos errores de compilación. - bosque.peterson

Hay 2 errores de vinculación repetidos, estos son LNK2019 (ConvertToUpperCase; IntegerToString; un problema de plantilla; y error), LNK 2001 (ConvertToUpperCase; IntegerToString; y error) y LNK2019 (GetLine; GetInteger; y problemas de plantilla) Me sumergí en ConvertToUpperCase , verificando el archivo fuente y cambió el archivo fuente de .c a una versión .cpp. Cambiar el archivo fuente trajo un montón de nuevos errores de compilación específicos de los nuevos archivos fuente. - bosque.peterson

después de actualizar los archivos de origen, los errores del enlazador desaparecieron. Hay nuevos errores relacionados con uno de los archivos, por lo que abriré una nueva pregunta para abordarlos. bosque.peterson

Si ya no tiene acceso a esa biblioteca (ya que es posible que ya no esté en la clase), puede escribir su propia ConvertToUpperCase función usando una de las técnicas de esta pregunta.

contestado el 23 de mayo de 17 a las 13:05

Tengo acceso a la biblioteca - 1) el TA del último trimestre está trabajando conmigo por correo electrónico stanford.edu/class/cs106x/handouts/06-Library-Reference.pdf, 2) el contenido de la biblioteca se publica en sourceForge, 3) la biblioteca se publica en línea. Me gustaría dejar de usar el archivo .lib y usar los archivos fuente; este folleto explica keithschwarz.com/cs106l/spring2009/handouts/… Además, escribí una función para reemplazar convertToUpperCase pero luego miré el archivo fuente y me di cuenta de que era la misma función usando toupper() - bosque.peterson

después de actualizar los archivos de origen, los errores del enlazador desaparecieron. Hay nuevos errores relacionados con uno de los archivos, por lo que abriré una nueva pregunta para abordarlos. bosque.peterson

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.