Dev - C++ - Problema visibilidad método privado

 
Vista:
Imágen de perfil de Juan
Val: 7
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema visibilidad método privado

Publicado por Juan (3 intervenciones) el 05/10/2019 15:28:30
Hola, buenas. Os comento.

Estoy comenzando a programar en C++. Para ello he comenzado con una simple aplicación que hace uso de una clase que he definido como Contraseña.

Como es habitual, he creado los dos ficheros correspondientes: Contraseña.h y Contraseña.cpp

A crear esta clase me he encontrado con el siguiente problema:

En la sección 'private' del fichero Contraseña.h he implementado la función privada 'esMayusc' que recibe un parámetro de tipo char y devuelve un booleano. Se trata de una función que en principio es para uso privado y no debe hacerse pública.

A su vez, en la sección 'public' de Contraseña.h he declarado una función pública llamada 'esContraseña' que recibe un puntero a carácter y devuelve un booleano.

Por otro lado, en el fichero Contraseña.cpp he realizado la implementación de la función pública 'esContraseña' que hace uso de la función privada 'esMayusc'.

Pues bien, al compilar la clase me da el siguiente error en Contraseña.cpp:

'esMayusc' was not declared in this scope

Entiendo que el error se produce al intentar hacer uso desde una función pública de otra que es privada. Se trata de un error conceptual.

Mi duda es: ¿Es que no puedo utilizar una función privada desde otra pública? ¿Qúe puedo hacer entonces? ¿Cómo poder hacer uso de la función 'esMayusc' desde 'esContraseña'? ¿Se puede solucionar el problema?

Supongo que es un error básico. Espero que me podáis ayudar.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema visibilidad método privado

Publicado por Alfil (1444 intervenciones) el 05/10/2019 16:37:21
Las funciones o métodos privados solo pueden ser utilizadas o llamadas desde otra función de la clase, ya sea publica o privada.

Para poder ayudarte en algo más necesitaríamos que nos pusieras el código del programa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan
Val: 7
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema visibilidad método privado

Publicado por Juan (3 intervenciones) el 05/10/2019 20:11:27
Incluyo el código del .h y el .cpp

La compilación falla en la línea de Contrasena.cpp que he comentado.

Si traslado el código de la función 'esContrasena' del fichero .cpp a la sección 'public' del fichero Contrasena.h, el programa funciona. Pero creo que lo correcto es que la implementación de la función se encuentre en el .cpp


Contrasena.h
===========

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#ifndef CONTRASENA_H
#define CONTRASENA_H
 
#include <iostream>
using namespace std;
 
#include <stdlib.h>
#include <time.h>
 
class Contrasena
{
public:
    Contrasena();
 
    bool esContrasena(char *contra);
 
    ~Contrasena();
 
private:
    char v_caracteres[8];
 
    int mayus_aleat()
    {
        return (65 + rand()% (91-65));
    };
 
    bool esMayusc(char c)
    {
        return (c >= 65 and c<= 90);
    };
 
};
 
#endif // CONTRASENA_H


Contrasena.cpp
============

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include "Contrasena.h"
 
Contrasena::Contrasena()
{
    int i;
    for(i=0; i<8; i++)
    {
        v_caracteres[i]= mayus_aleat();
    }
 
}
 
bool esContrasena(char *contra)
{
    int i = 0;
 
    while (i<8 and esMayusc(*contra)){ //Esta es la línea que no me compila
        i++;
    };
    return i<8;
}
 
Contrasena::~Contrasena()
{
}


Espero que podáis explicarme. Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alfil
Val: 4.344
Oro
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema visibilidad método privado

Publicado por Alfil (1444 intervenciones) el 05/10/2019 20:43:51
El error lo tienes en la definición de la función, que debe ser de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
bool Contrasena::esContrasena( char *contra )
{
    int i = 0;
 
    while ( i < 8 and esMayusc( *contra ) ) {
        i++;
    }
 
    return i < 8;
}

Por otro lado si estas programando en C++ utiliza bibliotecas de C++:

1
2
3
#include <iostream>
#include <cstdlib>
#include <ctime>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Juan
Val: 7
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problema visibilidad método privado

Publicado por Juan (3 intervenciones) el 07/10/2019 11:25:20
Ok, así funciona correctamente. Gracias por la ayuda,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar