es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

.h y .cpp están generando un error de referencia indefinida.

Estoy usando Visual Studio Code y me está dando un error de referencia indefinida cuando ejecuto el archivo main.cpp que tiene un archivo #include .h y otro archivo cpp para definir la función. Estos archivos funcionan perfectamente en el editor de código en línea llamado Replit, pero no con Visual Studio Code.

Archivo Beer.h:

#include <iostream>

using namespace std;
class Beer
{
private:
    string type;
    string where;
    double alcohol;
public:
    Beer();
    Beer(string,string,double);
    string gettype();
    void settype(string);
    string getwere();
    void setwere(string);
    double getalcohol();
    void setalcohol(double);
    bool equals(Beer,Beer);
    void serveAt(string );
    void printinfo();
};

Archivo Beer.cpp:

#include <iostream>

using namespace std;

#include "Beer.h"

Beer::Beer():type(""),where(""),alcohol(0){}

Beer::Beer(string Type,string Where,double Alcohol):type(Type),where(Where),alcohol(Alcohol){}

string Beer::gettype()
{
    return type;
}
void Beer::settype(string Type)
{
    type=Type;
}
string Beer::getwere()
{
    return where;
}
void Beer::setwere(string Where)
{
    where=Where;
}
double Beer::getalcohol()
{
    return alcohol;
}
void Beer::setalcohol(double Alcohol)
{
    alcohol=Alcohol;
}

bool Beer::equals(const Beer b1, const Beer b2)
{
    if(b1.type == b2.type && b1.where == b2.where)
        return true;
    else 
        return false;
}
void Beer::serveAt(string type)
{
    if(type == "light")
        cout <<"0 to 5 Celsuis\n";
    else if(type == "pale")
        cout <<"3 to 7 Celsuis\n";
    else if(type == "blond")
        cout <<"4 to 7 Celsuis\n";
    else if(type == "stout" || "AMBER")
        cout <<"7 to 5 Celsuis\n";
    else
        cout<<"???";
}
void Beer::printinfo()
{
    cout <<type<<" beer="" from=""></type<<"><where<< with="" an="" alcohol="" content="" of=""></where<<><alcohol<<"%\n"; }="" ```="" archivo="" main.cpp:="" ```cpp="" #include=""></alcohol<<"%\n";><iostream>

using namespace std;

#include "Beer.h"

int main()
{
    string type1;
    string where1;
    double alcohol1;
    string type2;
    string where2;
    double alcohol2;
    cout << "What type of beer are we looking at? ";
    cin >> type1;
    cout << "Where is it from? ";
    cin >> where1;
    cout << "What is the alcohol content? ";
    cin >> alcohol1;
    cout << "\n\nWhat type of beer are we looking at? ";
    cin >> type2;
    cout << "Where is it from? ";
    cin >> where2;
    cout << "What is the alcohol content? ";
    cin >> alcohol2;

    Beer bb1(type1,where1,alcohol1);
    Beer bb2(type2,where2,alcohol2);
    cout << "The Two beers are: \n";
    bb1.printinfo();
    bb2.printinfo();

    cout << "Serving recommendations: \n";
    bb1.serveAt(type1);
    bb2.serveAt(type2);

    cout<<"Are the beers equal? \n";
    if (bb1.equals(bb1,bb2))
        cout<<"yes";
    else 
        cout<<"no";
}

Error en la terminal:
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x1ae): referencia a `Beer::Beer(std::string, std::string, double)' sin definir
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x233): referencia a `Beer::Beer(std::string, std::string, double)' sin definir
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x271): referencia a `Beer::printinfo()' sin definir
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x27e): referencia a `Beer::printinfo()' sin definir
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x2c1): referencia a `Beer::serveAt(std::string)' sin definir
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x300): referencia a `Beer::serveAt(std::string)' sin definir
C:\Users\tanbe\AppData\Local\Temp\ccYZ7oLp.o:tempCodeRunnerFile.cpp:(.text+0x36a): referencia a `Beer::equals(Beer, Beer)' sin definir
collect2.exe: error: ld devolvió el estado de salida 1

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basado en los mensajes de error, parece que el enlazador no puede encontrar la definición de las funciones en el archivo Beer.cpp. Esto sugiere que pueda haber un problema con la forma en que el programa está siendo compilado y enlazado en Visual Studio Code.

    Para solucionar este problema, puede intentar los siguientes pasos:

    1. Asegúrese de haber incluido el archivo Beer.cpp en el proyecto o la configuración de construcción en Visual Studio Code.
    2. Verifique si el archivo Beer.cpp se está compilando y enlazando correctamente. Puede hacer esto mirando la salida de construcción o los registros de la consola para ver si hay mensajes de error relacionados con el proceso de compilación o enlace.

    3. Verifique si se está incluyendo correctamente el archivo de encabezado (Beer.h) en el archivo main.cpp. Asegúrese de haber utilizado la sintaxis correcta para la inclusión de archivos de encabezado (es decir, #include “Beer.h”).

    4. Verifique si las definiciones de funciones en el archivo Beer.cpp coinciden con las declaraciones de funciones en el archivo Beer.h. Asegúrese de que los nombres de las funciones, los parámetros y los tipos de retorno sean consistentes.

    5. Si todos los pasos anteriores fallan, puede intentar usar un compilador o IDE diferente para ver si el problema es específico de Visual Studio Code.

    En resumen, el error de referencia indefinido que está viendo en Visual Studio Code sugiere que puede haber un problema con la forma en que el programa se está compilando y enlazando. Siguiendo los pasos mencionados anteriormente, puede identificar y solucionar el problema para que el programa se ejecute con éxito.

Comments are closed.