Ir ao conteúdo

Posts recomendados

Postado

Considere o código abaixo. Ele apresenta uma classe em C++ que modela Inimigos no video game Dark Souls (linhas 1 até 14). Para testar essa classe criamos uma função main (linha 15). Porém esse código não está compilando. Não existe erro de importação de biblioteca. O compilador acusou que o erro se encontra no próprio código sendo mostrado. Com essas informações responda: • Qual o erro nesse código? Por que não compila? Justifique sua resposta. • O que precisa ser feito para que o código passe a compilar? Justifique sua resposta.

 

#include <iostream>

using namespace std;


class Inimigo{
private:
    string nome;
    double vida;
    void atacar()
    {
        cout << "Inimigo Atacando" << endl;
    }
public:
    Inimigo(string nome, double vida)
    {
        this->nome = nome;
        this->vida = vida;
    }
    bool estouVivo()
    {
        return vida >= 0;
    }
};
int main()
{

    Inimigo inimigo("Black Knight", 100);

    cout << inimigo.estouVivo();
    inimigo.atacar();
    return 0;
}

Postado

image.png.d445e47362760e3db7ad6eb62bed6c18.png

 

pois é: atacar() é private. Só pode ser usado dentro da classe.

 

image.png.65e4a95b384914778a74fc53a729652e.png

 

E main() não está dentro da classe Inimigo então atacar() não pode ser acessado aí
 

image.png.d31d9017307cad7953bd1e94d683a9bc.png

 

E aí vem a mensagem de que é inacessível. Faz sentido. 

 

private é privado, public é publico. É a definição.

 

Você tem um livro? Recomendo muito ter um livro. Muito mesmo. Um bom livro e ler. Uma tarde ao menos. structs, inicialização, construtores. Um mínimo.
 

1 hora atrás, Ana Catherine G disse:

não entendo muito sobre modificadores de acesso

 

Entendo. Mas public/private é o mínimo ao declarar em uma classe.

 

E ao menos public acho que é praticamente obrigatório para um iniciante saber o efeito porque se declarar o construtor e não especificar public não consegue sequer criar uma variável da classe.

Encolhendo um pouco a sua declaração e criando um construtor padrão, veja:


class Inimigo
{
    string nome;
    double vida;
    void atacar()
    { cout << "Inimigo Atacando" << endl; }
    Inimigo(string nome, double vida) : 
        nome{ "John Doe" }, vida{ 1.4 } {};

    Inimigo(string nome, double vida)
    {   this->nome = nome;
        this->vida = vida;
    }

    bool estouVivo()
    { return vida >= 0; }
};

Nada de public/private. E aí se tentar declarar: 
 

image.png.135ae8ce3b8f5e9d15a39c2ddba8474e.png

 

Já não compila mais. Dá erro nas duas tentativas. Então se declarou ao menos uma classe até hoje já passou por isso...

 

Se não quer usar isso apenas declare struct e não class.

 

Espero que tenha ajudado

  • Obrigado 1
Postado
3 minutos atrás, Ana Catherine G disse:

Me ajudou muito, mas como eu incluiria a função inimigo.atacar nesse programa usando classes? 

 

já está incluída. 

 

Como foi declarada numa seção private só pode ser acessada por métodos --- funções --- da classe Inimigo.

Só que sua classe é muito simples e nem tem outras funções. É só um exercício. Ela como private de nada serve.

Se quer que ela seja pública declare como tal. Só isso. 

 

Não é como em java. Em C++ não existe um modificador de acesso na verdade. Apenas trechos public/private na declaração de classe.

 

Veja esse exemplo:
 

    class Inimigo
    {
    private:
        string nome;
    private:
        double vida;
    public:
        double outra_vida;
        double nova_vida;
    public:
        void atacar() { cout << "Inimigo Atacando" << endl; };
    public:
        Inimigo(string nome, double vida) : nome(nome), vida(vida) {};
        bool estouVivo(){ return vida >= 0; }
    };

 

  • Obrigado 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!