Ir ao conteúdo
  • Cadastre-se
The_Ruivo

C++ Conversion from 'Data(Data)' to non-scalar type 'Data' requested

Posts recomendados

Quando tento compilar o código abaixo, ela mostra o seguinte erro:

Conversion from 'Data(Data)' to non-scalar type 'Data' requested

Esse erro ocorre na linha 34 (date=leData;)

Alguém pode me ajudar a resolver isso urgentemente?!

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include<locale.h>
using namespace std;
typedef struct
{
	int dia,mes,ano;
}Data;
Data leData(Data)
{
	Data date;
	printf("Digite o dia: ");
	scanf("%i",&date.dia);
	printf("Digite o mês: ");
	scanf("%i",&date.mes);
	printf("Digite o ano: ");
	scanf("%i",&date.ano);
	return date;
}
void imprimeData(Data)
{
	Data Data;
		cout<<Data.dia;
		cout<<"/";
		cout<<Data.mes;
		cout<<"/";
		cout<<Data.ano;
		cout<<"/";
}
int main(int argc, char** argv) {
	setlocale(LC_ALL, "Portuguese");
	Data date;
	date=leData;
	imprimeData;
	system("pause");
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que as funções não devem ter argumentos e a chamada de função deve ter os parênteses:

Data leData(){
	...
}

void imprimeData(){
	...
}

int main(int argc, char** argv) {
	setlocale(LC_ALL, "Portuguese");
	Data date;
	date=leData; //substituir por date=leData();
	imprimeData; //substituir por date=imprimeData();
	system("pause");
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luís Roberto C. da Silva Quando eu faço isso, ele fala que tem poucos argumentos, então eu coloquei a struct "date" entre os parenteses, mas quando eu executo ele não funciona

Compartilhar este post


Link para o post
Compartilhar em outros sites

Em C fica assim:

#include <stdio.h>

typedef struct{
	int dia,mes,ano;
}Data;
Data leData(){
	Data date;
	printf("Digite o dia: ");
	scanf("%d",&date.dia);
	printf("Digite o mês: ");
	scanf("%d",&date.mes);
	printf("Digite o ano: ");
	scanf("%d",&date.ano);
	return date;
}
void imprimeData(){
	Data date;
		printf("%d/%d/%d",date.dia,date.mes, date.ano);
}
int main(){
	Data date;
	date=leData();
	imprimeData();
	return 0;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui funcionou perfeitamente em C++ assim:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include<locale.h>
using namespace std;
typedef struct
{
	int dia,mes,ano;
}Data;
Data leData()
{
	Data date;
	printf("Digite o dia: ");
	scanf("%i",&date.dia);
	printf("Digite o mês: ");
	scanf("%i",&date.mes);
	printf("Digite o ano: ");
	scanf("%i",&date.ano);
	return date;
}
void imprimeData()
{
	Data Data;
		cout<<Data.dia;
		cout<<"/";
		cout<<Data.mes;
		cout<<"/";
		cout<<Data.ano;
		cout<<"/";
}
int main(int argc, char** argv) {
	setlocale(LC_ALL, "Portuguese");
	Data date;
	date=leData();
	imprimeData();
	system("pause");
	return 0;
}

 

adicionado 0 minutos depois
2 minutos atrás, The_Ruivo disse:

@Luís Roberto C. da Silva Não funcionou 😕

Quando eu executei ele mostrou números aleatórios na tela ;-;

Colocou os parênteses mas chamadas de função?

Compartilhar este post


Link para o post
Compartilhar em outros sites
agora, The_Ruivo disse:

@Luís Roberto C. da Silva Quais números você digitou, só para ter certeza que eu não estou fazendo ***** aqui :)

A data de hoje.

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Luís Roberto C. da Silva Sim

 

adicionado 0 minutos depois
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include<locale.h>
using namespace std;
typedef struct
{
	int dia,mes,ano;
}Data;
Data leData()
{
	Data date;
	printf("Digite o dia: ");
	scanf("%i",&date.dia);
	printf("Digite o mês: ");
	scanf("%i",&date.mes);
	printf("Digite o ano: ");
	scanf("%i",&date.ano);
	return date;
}
void imprimeData()
{
	Data Data;
		cout<<Data.dia;
		cout<<"/";
		cout<<Data.mes;
		cout<<"/";
		cout<<Data.ano;
		cout<<"/";
}
int main(int argc, char** argv) {
	setlocale(LC_ALL, "Portuguese");
	Data date;
	date=leData();
	imprimeData();
	system("pause");
	return 0;
}

Ele está assim

 

adicionado 1 minuto depois

image.thumb.png.2616b1230569892c12d823cf423ee412.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Problema no seu compilador, veja:

Capturar.thumb.PNG.c091188646b713778089de9b23695771.PNG

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente usar "%d" no lugar de "%i" para ler as variáveis

adicionado 0 minutos depois
1 minuto atrás, The_Ruivo disse:

@Luís Roberto C. da Silva Qual compilador você usa? Gostei da aparência dele

 

Na verdade é um compilador online:

https://www.onlinegdb.com/online_c++_compiler

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 minuto atrás, Luís Roberto C. da Silva disse:

Tente usar "%d" no lugar de "%i" para ler as variáveis

adicionado 0 minutos depois

Na verdade é um compilador online:

https://www.onlinegdb.com/online_c++_compiler

No compilador online foi!! Vou testar com outros compiladores também, obrigado ;)

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Talvez o problema no compilador desktop foi colocar a variável com o nome do struct:

void imprimeData()
{
	Data Data; //Tente mudar o nome da variável
		cout<<Data.dia;
		cout<<"/";
		cout<<Data.mes;
		cout<<"/";
		cout<<Data.ano;
		cout<<"/";
}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@The_Ruivo Assim também funciona:

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <locale.h>
using namespace std;

typedef struct
{
    int dia,mes,ano;
} Data;

Data leData()
{
    Data date;
    printf("Digite o dia: ");
    scanf("%i",&date.dia);
    printf("Digite o mês: ");
    scanf("%i",&date.mes);
    printf("Digite o ano: ");
    scanf("%i",&date.ano);
    return date;
}
void imprimeData(Data d)
{
    cout<<d.dia;
    cout<<"/";
    cout<<d.mes;
    cout<<"/";
    cout<<d.ano;
    cout<<"/";
}
int main(int argc, char** argv)
{
    setlocale(LC_ALL, "Portuguese");
    Data date;
    date = leData();
    imprimeData(date);
    system("pause");
    return 0;
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@allanxd Obrigado, assim funcionou no DevC++

;)

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...