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

Não compila : CS0103, CS1729, CS1061

Estou tentando descobrir o motivo desse erro
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Program.cs

// Chama a classe
Banda queen = new Banda("Queen");

//Chama a Classe
Album albumDoQueen = new Album("A night at the opera");
//nome do variavel.<propriedade>()

//Cria o objeto musica 1
//Inicializadores
Musica musica1 = new Musica(queen, "Love of My Life")
{
    Duracao = 213,
    Disponivel = true,
};

//cria o objeto musica2
Musica musica2 = new Musica(queen, "Bohemian Rhapsody");
musica2.Duracao = 354;
musica2.Disponivwel = false;

//Criação, exibição da Dicografia
albumDoQueen.AdicionarMusica(musica1);
albumDoQueen.AdicionarMusica(musica2);
queen.AdicionarAlbum(albumDoQueen);
//Adiciona o album

musica1.ExibirFichaTecnica();
musica2.ExibirFichaTecnica();
albumDoQueen.ExibirMusicasDoAlbum();
queen.ExibirDiscografia();

Musica.cs

class Musica
{
    //Constrututor - [public <tipo> ( argumento)
    public Musica(Banda artista)
    {
        //Prpriedade = argumento
        Artista = artista;
        Nome = nome;
    }
    public Banda Artista { get;}//Como a classe está em outro arquivo deve declarar public para se tornar acessivel
    public string Nome { get;}
    //public string genero;
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }//fornece atribuito de leitura(get) e escrita(set)
    //public Genero Genero { get; set; }
    public string DescricaoResumida => $"A musica {Nome} pertence a banda{Artista}";//Metodod Lambda, apenas leitura equivale ao de baixo
   
//Metodo
public void ExibirFichaTecnica()
{
    Console.WriteLine($"Nome: {Nome}");
    Console.WriteLine($"Artista: {Artista}");
    Console.WriteLine($"Duração: {Duracao}");
    

    if (Disponivel)
    {
        Console.WriteLine("Disponivel no plano");
        //ExibirIdetinficação();

    }
    else
    {
        Console.WriteLine("Disponivel no plano Plus++");
        // ExibirIdetinficação();
    }

}
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
4 respostas

Oi Ivan, tudo bem? 😊

Analisando seu código, identifiquei alguns pontos que podem estar causando os erros de compilação. 🤔

  1. Erro CS0103 em Musica.cs:

    • No construtor da classe Musica, você está usando a variável nome, que não foi declarada dentro do escopo do construtor.
    • Para corrigir, você precisa adicionar um parâmetro nome ao construtor e atribuí-lo à propriedade Nome da classe.
  2. Erro CS1729 em Program.cs:

    • O erro indica que não existe um construtor na classe Musica que aceite dois argumentos.
    • Isso ocorre porque você modificou o construtor para receber apenas um argumento (Banda artista), mas está tentando instanciar a classe Musica com dois argumentos (banda e nome da música) em Program.cs.
    • Para corrigir, você precisa atualizar o construtor da classe Musica para aceitar dois argumentos (Banda artista, string nome) e ajustar a chamada do construtor em Program.cs para passar os dois argumentos.
  3. Erro CS1061 em Program.cs:

    • O erro informa que a classe Musica não possui uma definição para "Disponivwel".
    • Verifiquei que você declarou a propriedade como Disponivel (com um 'i' apenas).
    • A correção é alterar a atribuição em Program.cs para musica2.Disponivel = false;.

Segue o código corrigido:

//Musica.cs
class Musica
{
    //Construtor
    public Musica(Banda artista, string nome)
    {
        Artista = artista;
        Nome = nome;
    }
    public Banda Artista { get; }
    public string Nome { get; }
    public int Duracao { get; set; }
    public bool Disponivel { get; set; }
    public string DescricaoResumida => $"A música {Nome} pertence a banda {Artista}";

    public void ExibirFichaTecnica()
    {
        Console.WriteLine($"Nome: {Nome}");
        Console.WriteLine($"Artista: {Artista.Nome}"); //Ajuste aqui
        Console.WriteLine($"Duração: {Duracao}");

        if (Disponivel)
        {
            Console.WriteLine("Disponível no plano");
        }
        else
        {
            Console.WriteLine("Disponível no plano Plus++");
        }
    }
}

//Program.cs
// Chama a classe
Banda queen = new Banda("Queen");

//Chama a Classe
Album albumDoQueen = new Album("A night at the opera");
//nome do variavel.<propriedade>()

//Cria o objeto musica 1
//Inicializadores
Musica musica1 = new Musica(queen, "Love of My Life")
{
    Duracao = 213,
    Disponivel = true,
};

//cria o objeto musica2
Musica musica2 = new Musica(queen, "Bohemian Rhapsody");
musica2.Duracao = 354;
musica2.Disponivel = false;

//Criação, exibição da Dicografia
albumDoQueen.AdicionarMusica(musica1);
albumDoQueen.AdicionarMusica(musica2);
queen.AdicionarAlbum(albumDoQueen);
//Adiciona o album

musica1.ExibirFichaTecnica();
musica2.ExibirFichaTecnica();
albumDoQueen.ExibirMusicasDoAlbum();
queen.ExibirDiscografia();

🎓 Para saber mais:

Espero que isso ajude a resolver o problema! 💪

E ai Ivan.
Tudo bem?
Vamos tentar resolver o erro.
Os erros mencionados (CS0103, CS1729 e CS1061) geralmente indicam problemas com nomes de variáveis, métodos ou objetos não reconhecidos.
Vamos analisar e corrigir os problemas do código.

Erros:

  1. CS0103 - O nome 'nome' não existe no contexto atual
    No seu construtor da classe Musica, você tem Nome = nome;, mas você não declarou a variável nome antes de usá-la.
    O parâmetro do construtor Musica não está recebendo o nome da música.
    Você deve passar o nome da música como um argumento para o construtor.
    Solução: Altere o construtor para receber o nome da música:
    public Musica(Banda artista, string nome)
    {
        Artista = artista;
        Nome = nome;
    }
    
  2. CS1729 - Não há um construtor que corresponda ao número de argumentos
    Esse erro ocorre porque você está chamando o construtor da classe Musica com apenas o artista e está passando o nome separadamente.
    Para isso funcionar, você precisa garantir que o construtor da classe Musica seja compatível com o número de argumentos passados ao instanciá-la.
    Solução: Como já ajustamos o construtor da classe Musica para incluir string nome, o erro CS1729 deve ser resolvido.
  3. CS1061 - O tipo 'Musica' não contém uma definição para 'ExibirFichaTecnica' e não é possível acessar com um método de extensão
    Esse erro ocorre quando o código tenta chamar um método ou propriedade que não está definido no tipo Musica.
    Solução: O método ExibirFichaTecnica está corretamente definido na classe Musica, então, se você está usando corretamente as instâncias de Musica, esse erro não deveria ocorrer.
    Verifique se você está chamando o método a partir de um objeto do tipo correto, e se a classe Musica está acessível no contexto.

Ajustes sugeridos no código:

1. Modificar o construtor de Musica:

public Musica(Banda artista, string nome)
{
    Artista = artista;
    Nome = nome;
}

2. Alterar a criação dos objetos Musica para passar o nome:

Musica musica1 = new Musica(queen, "Love of My Life")
{
    Duracao = 213,
    Disponivel = true,
};

Musica musica2 = new Musica(queen, "Bohemian Rhapsody")
{
    Duracao = 354,
    Disponivel = false,
};

Isso deve corrigir os erros de compilação.
Analise o codigo, faça as mudanças e envie um feedback com os resultados.
Qualquer duvida só avisar.
Bons estudos.

Alterei apenas a linha em Musica.cs

public Musica(Banda artista, string nome)
{
    Artista = artista;
    Nome = nome;
}

Que compilou também testei a linha , gerando o mesmo resultado

public void ExibirFichaTecnica()    {
//Codigo omitido
Console.WriteLine($"Artista: {Artista.Nome}"); 
//Código omitido

Eis o resultado, porem notei uma mensagem errada, mas vou abri outro tópico sobre esse problema, mas no gerou compilou perfeitamente.Grato
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

solução!

Ola amigo.
Fico feliz que deu certo.
Agora pode fechar este topico marcando como solucionado.
Bons estudos e qualquer duvida mande ai.
At