Programa em c++. Classes e construtores. Erro do construtor

TheRieper

Power Member
Boas tardes meus caros techzonianos. Eu tenho que fazer um programa com uso de classes com funções internas e um construtor. A função interna calcula o produto dos 3 nums, e o construtor calcula a soma dos quadrados dos 3 nums. Um dos nums é privado na classe. O código é o seguinte:
Código:
#include <iostream>
#include <conio.h>
using namespace std;

class dados{
int x;
public:
int y,z;
void setx (int num) {x=num;};
int getx(){return x;};
int produto (int n1,int n2, int n3)
{return (n1*n2*n3);};
int dados (int n1=1, int n2=1, int n3=1)
{cout<<n1*n1+n2*n2+n3*n3;};}p1;

main()
{int skints;
cout<<"Introduza o valor da variável x: ";
cin>>skints;
p1.setx(skints);
cout<<"Introduza o valor da variável y: ";
cin>>p1.y;
cout<<"Introduza o valor da variável z: ";
cin>>p1.z;
cout<<p1.produto(p1.getx(), p1.y, p1.z)<<endl;
dados p1 (skints, p1.y, p1.z);
getche();}
o erro que dá é o seguinte:
"14 D:\progs c++\revisoesteste.cpp return type specification for constructor invalid".

Agradecia uma ajudinha porque isto são revisões para o teste de amanhã e o meu prof é tão bom que dá problemas que não sabe corrigir>.<

Abraço
 
Um construtor nao tem tipo de retorno, logo não podes ter int dados(x y z).

Tira-lhe o 'int'.

Tens para ai mais umas coisas q eu trocava, mas vai pondo as duvidas conforme elas surgirem.
 
Um construtor nao tem tipo de retorno, logo não podes ter int dados(x y z).

Tira-lhe o 'int'.

Tens para ai mais umas coisas q eu trocava, mas vai pondo as duvidas conforme elas surgirem.

O que tu dizes é para ficar algo assim do genero?:
Código:
#include <iostream>
#include <conio.h>
using namespace std;

class dados{
int x;
public:
int y,z;
void setx (int num) {x=num;};
int getx(){return x;};
int produto (int n1,int n2, int n3)
{return (n1*n2*n3);};
dados (int n1=1,int n2=1,int n3=1)
{cout<<n1*n1+n2*n2+n3*n3;};}p1;

main()
{int skints;
cout<<"Introduza o valor da variável x: ";
cin>>skints;
p1.setx(skints);
cout<<"Introduza o valor da variável y: ";
cin>>p1.y;
cout<<"Introduza o valor da variável z: ";
cin>>p1.z;
cout<<p1.produto(p1.getx(), p1.y, p1.z)<<endl;
dados p1 (skints, p1.y, p1.z);
getche();}
Abraço e obrigado pela resposta

PS: agora dá o seguinte erro: 14 D:\progs c++\revisoesteste.cpp no matching function for call to `dados::dados()'
 
Última edição:
Tas a pegar nisso de uma maneira errada.

Deves ter a tua class 'Dados' num ficheiro àparte e a tua classe main noutro.

Assim, na classe Dados tens:
- construtor sem parametros = dados();
- construtor com parametros = dados(int n1, int n2, int n3);
- destrutor = ~dados();

Depois repara q tb n puseste tipo de retorno na funçao main.

Deverá ser int ou então void.
 
mas nós ainda não aprendemos a fazer chamada de ficheiros para usar no programa. supostamente deveriamos fazer isto tudo num só ficheiro, segundo ordens do prof. não há maneira de o fazer? penso que deve haver, só não sei é qual. :/

Abraço
 
o hype tocou nos pontos mais importantes, mas acho má política teres o p1, como variável global.
cria a class (devia ser num file à parte) e invocas uma instancia no main:

dados p1;
 
sim, estou a ver. mas ele continua a dar o mesmo erro, mas agora dá na instância criada. eu ainda nem assimilei muito bem, mas ele esta a dizer que devia chamar o construtor como função membro externa?:S

Abraço
 
Se fosse eu separava em três ficheiros:

Dados.h, Dados.cpp e main.cpp

Os includes desses ficheiros sao faceis: #include "Dados.h" no main.cpp e no Dados.cpp... claro que nao estou a incluir as outras bibliotecas que precises...
 
os dados.h contem a classe certo? e o dados.cpp?

Abraço

Oias amigo! Tou a ver que continuas a bater no C++ com toda a força. A sugestão que o arconada te deu é que eu implemento quando faço as minhas aplicações.

No ficheiro "dados.h" incluem-se apenas os "protótipos" dos métodos da classe. Por exemplo, pegando em duas das tuas funções:

Código:
int getx();
int produto (int n1,int n2, int n3);

Este ficheiro apenas serve para indicar que estas funções existem, já que são apenas específicados o tipo de retorno das funções, o nome das funções e os argumentos das funções. Não é incluido neste ficheiro o código de cada função.

Já para o ficheiro "dados.cpp", o que será incluido será aquilo que cada função faz, ou seja, o seu código. Pegando nas duas funções que te indiquei:

Código:
int dados::getx()
{
[INDENT]return x;
[/INDENT]}
 
int dados::produto (int n1,int n2, int n3)
{
[INDENT]return (n1*n2*n3);
[/INDENT]}

Repara que para identificar a função como deve ser, primeiro escreve-se o tipo do retorno (para as duas funções int), escreve-se a classe a que pertencem (dados), depois é a vez do operador scope (::) e em seguida o cabeçalho da função.

No entanto, a primeira linha que vais escrever neste ficheiro é a seguinte:
Código:
#include "dados.h"

para assim fazeres a inclusão dos protótipos das funções.

Quanto ao ficheiro "main.cpp", é o ficheiro em que se faz a definição da função main(). Ou seja, é o ponto de entrada para o programa.

Bom, espero ter-te esclarecido.

Vá, cumps
 
Percebi isso bem. Obrigado pela explicação, assim é mais fácil fazer as coisas.

Abraço

Mil obrigados. depois de ler bem isto tudo consegui atingir o "eureka" lol:P já tá a funcionar^^
 
Última edição:
Back
Topo