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.

C++ declarando una función const en el archivo de encabezado y implementándola en el archivo .cpp.

Tengo el siguiente encabezado:

#include <string>

using namespace std;

enum COLOR {Verde, Azul, Blanco, Negro, Marrón};

class Animal{
    private:
    string _name;
    COLOR _color;

    public:
    Animal();
    ~Animal();
    void speak() const;
    void move() const;
} ;

Y la siguiente implementación de .cpp:

#include <iostream>
#include <string>
#include "Animal.h"

Animal::Animal(): _name("desconocido")
    {
        cout << "construyendo objeto Animal" << endl;
    };

Animal::~Animal()
    {
        cout << "destruyendo objeto Animal" << endl;
    }

void Animal::speak() const
    {
        cout << "Animal habla" << endl;
    }

void Animal:: move() const
    {};

Sin embargo, las funciones speak() y move() me están dando un error: "ninguna declaración coincide con Animal::speak()". Si elimino el 'const' al final de la declaración, no hay problemas en la compilación. ¿Cómo implemento correctamente una función const en un archivo .cpp?
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para implementar correctamente una función const en un archivo .cpp, es necesario agregar la palabra clave const tanto en la declaración como en la implementación. En el código anterior, las funciones speak() y move() están declaradas como const en el archivo de encabezado, pero no en el archivo de implementación. Por lo tanto, se produce el error “ninguna declaración coincide con Animal::speak ()”.

    Para solucionarlo, agregue la palabra clave const en el archivo de implementación de la siguiente manera:

    void Animal::speak () const {
        cout << "Animal speaks" << endl;
    }
    void Animal::move() const {} 
    

    Al agregar la palabra clave const, el compilador sabe que estas funciones no modificarán ninguna variable miembro, lo que les permite ser llamadas en un objeto const de la clase Animal.

Comments are closed.