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.

El compilador/enlazador se queja de que no se encuentra la definición de la función en C++.

He hecho esto tantas veces, sin embargo, la razón por la que Visual Studio se queja de esto se me escapa.

Manipulator.cpp:

#include "Manipulator.h"

Manipulator::Manipulator() {}
Manipulator::~Manipulator() {}

void proc(std::string p, int f, std::string c)
{
    // switch-case p to c based on f:

    return;
}

Manipulator.h: (void -proc- tiene un guión bajo en rizado, y eso es lo que me vuelve loco).

#ifndef MANIPULATOR_H
#define MANIPULATOR_H

#include <string>

class Manipulator
{
private:

protected:

public:
    Manipulator();
    ~Manipulator();

    void proc(std::string, int, std::string);
    // función definida para 'proc' no encontrada.

};

#endif MANIPULATOR_H

main.cpp

#include "Manipulator.h"
...
int main() 
{
    ...
    Manipulator m; 
    ...
    m.proc(opdBMP, fxn, newBMP);

    return 0; 
}

¿Qué es lo que Visual Studio quiere para que pueda seguir adelante? Me está diciendo que hay dos errores de enlace: LNK2019 y LNK1120 (externo no resuelto). (Solía llevar un registro de este tipo de errores pero perdí el archivo como un registro con estos).

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que la función proc en Manipulator.cpp está definida fuera de la clase Manipulator. Para solucionar los errores del enlazador, coloca la definición de la función dentro de la declaración de la clase en Manipulator.h de la siguiente manera:

    “`C++
    class Manipulator
    {
    private:

    protected:

    public:
    Manipulator();
    ~Manipulator();

    void proc(std::string p, int f, std::string c)
    {
        // switch-case p para c basado en f:
    
        return;
    }
    

    };


    Alternativamente, puedes declarar la función en la declaración de la clase y definirla fuera (como se hace actualmente en `Manipulator.cpp`), pero no olvides agregar el nombre de la clase antes del nombre de la función en la definición: ```C++ class Manipulator { private: protected: public: Manipulator(); ~Manipulator(); void proc(std::string p, int f, std::string c); }; void Manipulator::proc(std::string p, int f, std::string c) { // switch-case p para c basado en f: return; }

    De cualquier manera, esto debería solucionar los errores del enlazador que estás experimentando.

Comments are closed.