una tipos son salida que programa pero mensajes los lexicos incorrecta esto errores error ejecuta detecta conoce compilador compila como c++ g++ undefined-reference

son - tipos de error en c++



C++ referencia indefinida a funciĆ³n definida (4)

Aunque los carteles anteriores cubrieron su error particular, puede obtener errores del enlazador de ''Referencia no definida'' al intentar compilar el código C con g ++, si no le dice al compilador que use el enlace C.

Por ejemplo, debes hacer esto en tus archivos de cabecera C:

extern "C" { ... void myfunc(int param); ... }

Para que ''myfunc'' esté disponible en los programas de C ++.

Si aún desea usar esto desde C, ajuste las extern "C" { y } #ifdef __cplusplus en #ifdef __cplusplus condicionales del preprocesador, como

#ifdef __cplusplus extern "C" { #endif

De esta manera, el bloque extern solo se "saltará" cuando se usa un compilador de C.

No puedo entender por qué esto no está funcionando. Pondré los tres archivos y posiblemente alguien pueda decirme por qué está generando este error. Estoy usando g ++ para compilar el programa.

Programa:

#include <iostream> #include "h8.h" using namespace std; int main() { char sentence[MAX_SENTENCE_LENGTH]; char writeTo[] = "output.txt"; int distanceTo,likePosition, length, numWords; cout << "ENTER A SENTENCE! "; cin.getline(sentence, 299); length = strlen(sentence); numWords = wordCount(sentence, length); for(int x = 0; x < 3; ++x) { likePosition = likePos(numWords); distanceTo = lengthTo(sentence, likePosition, length); insertLike(sentence, distanceTo, length, writeTo); } return 0; }

Archivo de función:

void insertLike(const char sentence[], const int lengthTo, const int length, char writeTo[]) { char part1[MAX_SENTENCE_LENGTH], part2[MAX_SENTENCE_LENGTH]; char like[] = " like "; for(int y = 0; y < lengthTo; ++y) part1[y] = sentence[y]; for(int z = lengthTo+1; z < length - lengthTo; ++z) part2[z] = sentence[z]; strcat(part1, like); strcat(part1, part2); writeToFile(sentence, writeTo); return; }

Archivo de cabecera:

void insertLike(const char sentence[], const int lengthTo, const int length, const char writeTo[]);

El error es exactamente:

undefined reference to ''insertLike(char const*, int, int, char const*)'' collect2: ld returned 1 exit status


Esto también podría suceder si está utilizando CMake. Si ha creado una nueva clase y desea crear una instancia, en la llamada del constructor recibirá este error, incluso cuando el encabezado y los archivos cpp son correctos, si no ha modificado CMakeLists.txt consecuencia.

Con CMake, cada vez que cree una nueva clase, antes de usarla el encabezado, los archivos cpp y otros archivos compilables (como los archivos CMakeLists.txt ui ) se deben agregar a CMakeLists.txt y luego volver a ejecutar cmake . donde se almacena CMakeLists.txt .

Por ejemplo, en este archivo CMakeLists.txt :

cmake_minimum_required(VERSION 2.8.11) project(yourProject) file(GLOB ImageFeatureDetector_SRC *.h *.cpp) ### Add your new files here ### add_executable(yourProject YourNewClass.h YourNewClass.cpp otherNewFile.ui}) target_link_libraries(imagefeaturedetector ${SomeLibs})

Si está utilizando el file(GLOB yourProject_SRC *.h *.cpp) comando file(GLOB yourProject_SRC *.h *.cpp) , solo necesita volver a ejecutar cmake . sin modificar CMakeLists.txt .


La declaración y definición de insertLike son diferentes

En su archivo de cabecera:

void insertLike(const char sentence[], const int lengthTo, const int length, const char writeTo [] );

En su ''archivo de función'':

void insertLike(const char sentence[], const int lengthTo, const int length, char writeTo [] );

C ++ permite la sobrecarga de funciones, donde puede tener múltiples funciones / métodos con el mismo nombre, siempre y cuando tengan argumentos diferentes. Los tipos de argumento son parte de la firma de la función.

En este caso, insertLike que toma const char* como su cuarto parámetro e insertLike que toma char * como su cuarto parámetro son funciones diferentes .


Necesitas compilar y enlazar todos tus archivos fuente juntos:

g++ main.c function_file.c