Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Aplicação da função FazLogin

Instânciei um objeto da classe Gerente e tentei aplicar a chamada da função FazLogin mas ele dá o seguinte erro:

conversão para classe base inacessível "Authentication" não é permitido.

Existe alguma forma que deve ser inserido o parêmetro em casos de objetos que tem herança multipla?

6 respostas

Fala, Marcus. Posta o código e o erro completo, por favor?

void login(const Authentication &someone, string password)
{
    if (someone.authentication(password))
    {
        cout << "Login successfully." << endl;
    }
    else
    {
        cout << "Wrong password." << endl;
    }
}

int main()
{
    Manager manager_1(Cpf("123.456.789-10"), "Joana Moura", 4981.90, "senhamestra");
    cout << manager_1.get_name() << " gains $" << manager_1.get_salary() << endl;

    login(manager_1, "senha_errada");
    // login(account_1, "1senha");

    return 0;
}

E as Classes estão aqui

// Manager.hpp

#pragma once
#include "Employee.hpp"
#include "Authentication.hpp"

class Manager final : public Employee, Authentication
{
private:
    /* data */
public:
    Manager(Cpf cpf, std::string name, float salary, std::string password);
    ~Manager();

    float bonus() const;
};

// manager.cpp

#include "Manager.hpp"

Manager::Manager(Cpf cpf, std::string name, float salary, std::string password)
    : Employee(cpf, name, salary),
      Authentication(password)
{
}

Manager::~Manager()
{
}

float Manager::bonus() const
{
    return this->get_salary() * 0.5;
}

// Authentication.hpp

#pragma once
#include <string>

class Authentication
{
private:
    std::string password;

public:
    Authentication(std::string password);

    bool authentication(std::string password) const;
};

// Authentication.cpp

#include "Authentication.hpp"

Authentication::Authentication(std::string password) : password(password)
{
}

bool Authentication::authentication(std::string password) const
{
    return password == this->password;
}

tento compilar com g++ Bank/src/*.cpp -o bank.out e surge este erro:

Bank/src/main.cpp: In function ‘int main()’: Bank/src/main.cpp:55:10: error: ‘Authentication’ is an inaccessible base of ‘Manager’ 55 | login(manager_1, "senha_errada");

solução!

Putz, você pegou um errinho bem chato mesmo. Vou tentar escrever um "Para saber mais" sobre isso.

class Manager final : public Employee, Authentication

Aqui, a herança vinda de Employee é pública, mas a de Authentication é privada, já que você não adicionou a visibilidade. Precisaria ser:

class Manager final : public Employee, public Authentication

Muda isso e me diz se resolve.

Funcionou!

Pensei que o primeiro public atribuia a ambas as classes hahaha

Obrigado Vinicius!

Pois é, dá a impressão que sim, né!? rsrsrs

Mas que bom que funcionou, Marcus. :-D

Bons estudos.