Programa com orientação a objeto [RESOLVIDO]

1. Programa com orientação a objeto [RESOLVIDO]

lucas
ljparaujo

(usa Debian)

Enviado em 22/10/2018 - 23:07h

Boa noite pessoal estou tentando aprender PEOO usando C++ então fiz um código de um conta de banco. Estou usando o sublime text e ele apresenta esse erro :

error: invalid conversion from 'const char*' to 'char' [-fpermissive'

quando tento compilar pelo terminal da esse erro :
conta.cpp: In constructor ‘Conta::Conta(char, int, float)’:
conta.cpp:5:12: error: incompatible types in assignment of ‘char’ to ‘char [100]’
titular = c;
^
conta.cpp: At global scope:
conta.cpp:10:20: error: ISO C++ forbids declaration of ‘mostra_menu’ with no type [-fpermissive]
Conta::mostra_menu()
^
conta.cpp:10:1: error: prototype for ‘int Conta::mostra_menu()’ does not match any in class ‘Conta’
Conta::mostra_menu()
^~~~~
In file included from conta.cpp:1:0:
conta.h:13:7: error: candidate is: void Conta::mostra_menu()
void mostra_menu();
^~~~~~~~~~~
conta.cpp:17:28: error: ISO C++ forbids declaration of ‘deposito’ with no type [-fpermissive]
Conta::deposito(float valor)
^
conta.cpp:17:1: error: prototype for ‘int Conta::deposito(float)’ does not match any in class ‘Conta’
Conta::deposito(float valor)
^~~~~
In file included from conta.cpp:1:0:
conta.h:15:7: error: candidate is: void Conta::deposito(float)
void deposito(float valor);
^~~~~~~~
conta.cpp:24:25: error: ISO C++ forbids declaration of ‘saque’ with no type [-fpermissive]
Conta::saque(float valor)
^
conta.cpp: In member function ‘int Conta::saque(float)’:
conta.cpp:28:3: error: ‘cout’ was not declared in this scope
cout << "\nSaldo insuficiente ..."
^~~~
conta.cpp:34:3: error: ‘cout’ was not declared in this scope
cout << "\nSaque realizado com sucesso !!" << endl;
^~~~
conta.cpp:34:49: error: ‘endl’ was not declared in this scope
cout << "\nSaque realizado com sucesso !!" << endl;
^~~~
conta.cpp: At global scope:
conta.cpp:40:17: error: ISO C++ forbids declaration of ‘consulta’ with no type [-fpermissive]
Conta::consulta()
^
conta.cpp:40:1: error: prototype for ‘int Conta::consulta()’ does not match any in class ‘Conta’
Conta::consulta()
^~~~~
In file included from conta.cpp:1:0:
conta.h:14:7: error: candidate is: void Conta::consulta()
void consulta();
^~~~~~~~
conta.cpp: In member function ‘int Conta::saque(float)’:
conta.cpp:38:1: warning: control reaches end of non-void function [-Wreturn-type]
}
^
main.cpp: In function ‘int main(int, const char**)’:
main.cpp:7:46: error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
Conta c1 = new Conta("Lucas", 12345, 4500.50);
^
In file included from main.cpp:2:0:
conta.h:11:2: note: initializing argument 1 of ‘Conta::Conta(char, int, float)’
Conta(char c, int n, float s);
^~~~~
main.cpp:7:13: error: conversion from ‘Conta*’ to non-scalar type ‘Conta’ requested
Conta c1 = new Conta("Lucas", 12345, 4500.50);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Esses são os códigos:
conta.h

#ifndef CONTA_H
#define CONTA_H

class Conta
{
char titular[100];
int num_conta;
float saldo;

public:
Conta(char c, int n, float s);
~Conta();
void mostra_menu();
void consulta();
void deposito(float valor);
int saque(float valor);
};

#endif


conta.cpp:
#include "conta.h"

Conta::Conta(char c, int nc, float s)
{
titular = c;
num_conta = nc;
saldo = s;
}

Conta::mostra_menu()
{
cout << "\n[1] Depositar" << endl;
cout << "[2] Sacar" << endl;
cout << "[3] Consultar saldo" << endl;
}

Conta::deposito(float valor)
{
saldo += saldo; //desse jeito
cout << "\nDeposito realizado com sucesso !!" << endl;

}

Conta::saque(float valor)
{
if (saldo < valor)
{
cout << "\nSaldo insuficiente ..."
return 0;
}
else
{
saldo = saldo - valor; // ou deste
cout << "\nSaque realizado com sucesso !!" << endl;
return 1;
}

}

Conta::consulta()
{
cout << "\ntitular: " << nome << endl;
cout << "Numero da conta: " << numero << endl;
cout << "Saldo da conta: " << saldo << endl;
}


main.cpp:
#include <iostream>
#include "conta.h"

using namespace std;

int main(int argc, char const *argv[])
{
Conta c1 = new Conta("Lucas", 12345, 4500.50);

c1.mostra_menu();
c1.deposito(1000.05);
c1.saque(100);
c1.consulta();

return 0;
}


No exemplo que vi a função main tem retorno void, mas as funções main em c e c++ não devem retornar um inteiro ?

Desde já agradeço a ajuda.


  


2. MELHOR RESPOSTA

Paulo
paulo1205

(usa Ubuntu)

Enviado em 24/10/2018 - 09:12h

As mensagens de erro emitidas pelo compilador são bem claras.

Na primeira delas, o compilador reclama que você está tentando uma atribuição entre tipos de dados incompatíveis. E, de fato, você está: um array de caracteres não pode receber um valor que é um único caráter (aliás, um array não pode receber valor nenhum em C ou em C++, a não ser no momento da declaração). Uma forma de corrigir é mudar a atribuição de modo a gravar o caráter em uma posição específica do array. O mais provável, no entanto, é que você não queira realmente usar um único caráter como nome do titular da conta. Assim, você provavelmente deve mudar o tipo do argumento da função de forma a poder receber um nome composto por múltiplos caracteres, e usar uma função de cópia de strings para copiar tais caracteres para o campo titular do seu objeto. Se você usar o tipo std::string da biblioteca padrão do C++ em lugar de arrays nativos e ponteiros, essas alterações ficarão muito mais simples.

Várias das outras mensagens se devem ao fato de você ter omitido o tipo de retorno na hora de definir as funções-membros da classe. Construtores e destrutores não têm tipos de retorno, mas todas as outras funções-membros os têm, mesmo que seja void, e você tem de colocá-los na hora de definir tais funções. Como exemplo, sua função Conta::deposito() foi declarada (no .h) como tendo tipo de retorno void, então sua definição (no .cpp) tem também de especificar esse tipo.

void Conta::deposito(float valor){
saldo+=valor; // NÃO “saldo+=saldo”, como você tinha feito.
}


3. Re: Programa com orientação a objeto [RESOLVIDO]

lucas
ljparaujo

(usa Debian)

Enviado em 24/10/2018 - 21:33h

Realmente foi pura falta de atenção minha. Obrigado por ceder seu tempo ajudando.