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.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts