Ir ao conteúdo
  • Cadastre-se

C++ Expected primary expression before '.' token


The_Ruivo

Posts recomendados

Este é um exercício que estou fazendo sobre structs e funções, só que ele dá erro nas linhas: 13,15,17 e 23

Nas linhas 13,15 e 17, ele dá a seguinte mensagem: Expected primary-expression before '.' token

Já na linha 23 é a seguinte mensagem: no match for 'operator=' (operand types are 'Data {aka data}' and 'data(Data) {aka data(data)}')

 

 

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

 

Link para o comentário
Compartilhar em outros sites

Nomes de variáveis.

Spoiler

As variáveis no C podem ter qualquer nome se duas condições forem satisfeitas: o nome
deve começar com uma letra ou sublinhado (_) e os caracteres subsequentes devem ser letras,
números ou sublinhado (_). Há apenas mais duas restrições: o nome de uma variável não pode
ser igual a uma palavra reservada, nem igual ao nome de uma função declarada pelo
programador, ou pelas bibliotecas do C. Variáveis de até 32 caracteres são aceitas. Mais uma
coisa: é bom sempre lembrar que o C é "case sensitive" e portanto deve-se prestar atenção às
maiúsculas e minúsculas.
Quanto aos nomes de variáveis:
• É uma prática tradicional do C, usar letras minúsculas para nomes de variáveis e
maiúsculas para nomes de constantes. Isto facilita na hora da leitura do código;
• Quando se escreve código usando nomes de variáveis em português, evita-se
possíveis conflitos com nomes de rotinas encontrados nas diversas bibliotecas, que são em sua
maioria absoluta, palavras em inglês.

Declaração de variáveis.

Spoiler

As variáveis no C devem ser declaradas antes de serem usadas. A forma geral da
declaração de variáveis é:
tipo_da_variável lista_de_variáveis;
As variáveis da lista de variáveis terão todas o mesmo tipo e deverão ser separadas por
vírgula. Como o tipo default do C é o int, quando vamos declarar variáveis int com algum dos
modificadores de tipo, basta colocar o nome do modificador de tipo. Assim um long basta para
declarar um long int.
Por exemplo, as declarações
    char ch, letra;
    long count;
    float pi;
declaram duas variáveis do tipo char (ch e letra), uma variavel long int (count) e um
float pi.
Há três lugares nos quais podemos declarar variáveis. O primeiro é fora de todas as
funções do programa. Estas variáveis são chamadas variáveis globais e podem ser usadas a
partir de qualquer lugar no programa. Pode-se dizer que, como elas estão fora de todas as
funções, todas as funções as vêem. O segundo lugar no qual se pode declarar variáveis é no
início de um bloco de código. Estas variáveis são chamadas locais e só têm validade dentro
do bloco no qual são declaradas, isto é, só a função à qual ela pertence sabe da existência
desta variável, dentro do bloco no qual foram declaradas. O terceiro lugar onde se pode
declarar variáveis é na lista de parâmetros de uma função. Mais uma vez, apesar de estas
variáveis receberem valores externos, estas variáveis são conhecidas apenas pela função onde
são declaradas.

 

quando é declarado uma estrutura dessa forma

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

você vai ter uma variável do tipo estrutura com os seguintes membros "dia,mes,ano" podendo ser usado em qualquer parte do programa simplesmente fazendo assim Data.dia

 

Agora quando você faz dessa maneira que você fez

1 hora atrás, The_Ruivo disse:

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

você está declarando um tipo com o nome Data podendo declarar variáveis com esse tipo.

Exemplo

#include <stdio.h>
  
/* Tipos */
typedef struct 
{ 
	int dia,mes,ano; 
}Data;


int main(void)
{
  Data d;
  long horas,minutos,segundos;
  printf("Digite o dia:");
  scanf("%i",&d.dia);
  printf("Digite o mes:");
  scanf("%i",&d.mes);
  printf("Digite o ano:");
  scanf("%i",&d.ano);
  /* Etc......*/
  return(0);
}

d e do tipo Data.

 

Seu algoritmo consertado.

#include <stdlib.h>
#include <stdio.h>
#include <locale.h>


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


Data leData(void)
{
  Data d;
	printf("Digite o dia: ");
	scanf("%i",&d.dia);
	printf("Digite o mês: ");
	scanf("%i",&d.mes);
	printf("Digite o ano: ");
	scanf("%i",&d.ano);
	return(d);
}
int main(int argc, char** argv) {
	setlocale(LC_ALL, "Portuguese");
	Data d;
	d=leData();
  	printf("\nDia:%i\nMes:%i\nAno:%i",d.dia,d.mes,d.ano);
  	getchar();    /* Faz a mesa coisa que o system("pause"); */
	/* system("pause"); */
	return(0);
}

 

Fontes:Apostila da Linguagem C - Guilherme Galante - Raphael Laércio Zago.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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...