Ajuda algoritmo C++

rafh

New Member
Registrado
Estava praticando um pouco de de POO em C++ e tentei desenvolver um controle de uma livraria, entretanto, toda a vez que compilo, é acusada a necessidade da conversão de um tipo não escalar. Alguém poderia me dar uma ajuda?
Segue ai o código:

Código:
#ifndef _LIVRO_H_
#define _LIVRO_H_
#include<iostream>
#include<string>
using namespace std;
class Livro{
      public:
             Livro(char *nom, char *aut, char *editor);




             void getnome(){ cout<<"\n "<<nome;}
             void getautor(){ cout<<"\n "<<autor;}
             void geteditora(){ cout<<"\n "<<editora;}


      private:
              char nome[50], autor[40], editora[50];
              };


Livro::Livro(char *nom, char *aut, char *editor){
     strcpy(Livro::nome, nom);
     strcpy(Livro::autor, aut);
     strcpy(Livro::editora, editor);
     }
#endif
Código:
#include<iostream>
#include"livro.h"
using namespace std;


main(){
       Livro titulos = new Livro("Eldest", "Christopher Paolini", "Rocco");
       titulos.getnome();
       titulos.getautor();
       titulos.geteditora();


       system("pause");
       }
O erro é esse: conversion for 'Livro*' to non-scalar type 'Livro' required

​Tentei no code::blocks e no Dev-C++.
 
livro.h

C++:
#ifndef _LIVRO_H_
#define _LIVRO_H_

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

using namespace std;

class Livro{

      public:

             Livro(char *nom, char *aut, char *editor);

             void getnome(){ cout<<"\n "<<nome;}

             void getautor(){ cout<<"\n "<<autor;}

             void geteditora(){ cout<<"\n "<<editora;}


      private:

              char nome[50], autor[40], editora[50];

              };

Livro::Livro(char *nom, char *aut, char *editor){

     //Usar 'this' quando se referir a elementos da propria classe.
     strcpy(this->nome, nom);
     strcpy(this->autor, aut);
     strcpy(this->editora, editor);

     }

#endif

livro.cpp

C++:
#include <iostream>
#include "livro.h"

using namespace std;

int main(){

    //Ponteiro pra objeto da classe Livro
    Livro *titulos = new Livro("Eldest", "Christopher Paolini", "Rocco");

    //Operador flecha pra acessar os metodos da classe
    titulos->getnome();
    titulos->getautor();
    titulos->geteditora();

    return 0;
}

Basicamente isso.
Quando instanciar um objeto, crie um ponteiro para a classe.
 
Última edição:
Vlw ae cara. Quanto ao modo de se referir a métodos da classe, fiz do mesmo modo apresentado pelo C/C++: A Biblia. Tava mesmo estranho esse erro. Muito obrigado cara, foi de grande ajuda!
 

Users who are viewing this thread

Voltar
Topo