Problema con una struttura

di il
5 risposte

Problema con una struttura

Salve a tutti
sono nuovo di questo forum, scrivo perché sto facendo alcune prove con il C, strutture e puntatori e non riesco a risolvere alcuni errori del compilatore.
il compilatore che utilizzo è gcc su windows 10, premetto che non posterò tutto il codice perché è lunghetto, posterò solo le parti dove ho gli errori, ma se necessario lo posto completo.
poi, prima che vi "arrabiate" per gli errori che avrò fatto, premetto che sto studiando e che questi sono dei test per capire bene il funzionamento delle struct e dei puntatori

ho definito la seguente struttura

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

typedef struct _Rpi
{
    char *cNumbPort;     //Numero porta
    bool bValLetto;       //Valore letto dall'ingresso
    bool bValScritto;     //Valore che deve essere scritto nell'uscita
    bool bCreaPorta;      //Abilita comando creazione porta
    bool bDistruggiPorta; //Abilita comando distruzione porta
    bool bPortaCreata;    //Porta creata
    bool bInOut;          //Definisce se la porta è ingresso o uscita (1 ingresso, 0 uscita)
} Rpi;
di seguito ho messo i prototipi di funzione

void CreaPorta(Rpi *Port);
bool ManipolazioneFile(char *cNumPorta, int InitPorta);
e poi main e le funzioni vere e proprie

void main()
{
	char *cLedA;
  	Rpi Led_A;
  	...
  	
  	strcpy(cLedA, "4");
	....
	Led_A.cNumbPort = cLedA;        //Definisce numero uscita per il led A
   	Led_A.bInOut = 0;                //Definisce Uscita
   	Led_A.bCreaPorta = 1;                //Abilita creazione porta
	...
	
	if ((Led_A.bCreaPorta)&&(!Led_A.bPortaCreata)) CreaPorta(&Led_A);
	...
}

bool ManipolazioneFile(char *cNumPorta, int InitPorta)
{
	/* - - Dichiarazione variabili locali - - */
	FILE *handle;
	bool valore;

	/* Crostruzione della stringa per apertura file */
	if         (InitPorta == 0)  strcpy(strPath, "/sys/class/gpio/export");	// Creazione porta GPIO
	else if  (InitPorta == 1)  strcpy(strPath, "/sys/class/gpio/unexport");	// Rilascio porta GPIO
	else                              AddStringa(cNumPorta, InitPorta);			// Formazione stringa per comando

	/* Esecuzione comando sul file di definizione hardware */
	if (InitPorta == 30)   handle = fopen(strPath,"r");	// Lettura input e su file
	else                        handle = fopen(strPath,"w");	// Scrittura output e su file

	switch (InitPorta)
	{
		case 0:         // creazione/rilascio porta GPIO
		case 1:         fprintf(handle, cNumPorta);
				    valore = 0;
				    break;

		case 10:        // definisce porta GPIO in ingresso
				    fprintf(handle,"in");
				    valore = 0;
						break;

		case 20:		// definisce porta GPIO in uscita
						fprintf(handle,"out");
						valore = 0;
						break;

		case 30:		// Lettura ingressi
						fscanf(handle,"%d",&valore);
						break;

		case 40:		// Scrittura 0 sull'uscita
						fprintf(handle, "0");
						valore = 0;
						break;

		case 50:		// Scrittura 1 sull'uscita
						fprintf(handle, "1");
						valore = 0;
						break;

		default:        // Fine step
						valore = 0;
						break;
	}

	/* Chiusura file dopo modifica */
	fclose(handle);

	/* Ritorno funzione */
	return valore;
}
	
void CreaPorta(Rpi *Port)
{
	/* --- Dichiarazione variabili locali --- */
	bool val;
  	char *cPorta;

  	/* copia numero porta da eseguire operazioni */
  	cPorta = Rpi.cNumbPorta;

	/* Chiamata a funzione per apertura file */
	val = ManipolazioneFile(cPorta, 0);
  	Rpi.bPortaCreata = 1;
}

ottengo questi errori dal compilatore

C:\Users\it14004582\Dropbox\Projects\Raspberry>gcc in_out_ver4.c
in_out_ver4.c: In function 'CreaPorta':
in_out_ver4.c:192:12: error: expected expression before 'Rpi'
   cPorta = Rpi.cNumbPorta;
            ^~~
in_out_ver4.c:196:6: error: expected identifier or '(' before '.' token
   Rpi.bPortaCreata = 1;
      ^
Grazie per le risposte

5 Risposte

  • Re: Problema con una struttura

    In

    char *cPorta;

         /* copia numero porta da eseguire operazioni */
         cPorta = Rpi.cNumbPorta;


    Rpi è solo un tipo. Il dato lo devi ottenere dall'argomento passato che è Port ed è un puntatore.
  • Re: Problema con una struttura

    Ciao
    mi pare di sì, nella parte di codice dove c'è il main, in fondo c'è la funzione "CreaPorta"
  • Re: Problema con una struttura

    Comunque la riposto

    
    void CreaPorta(Rpi *Port)
    {
    	/* --- Dichiarazione variabili locali --- */
    	bool val;
      	char *cPorta;
    
      	/* copia numero porta da eseguire operazioni */
      	cPorta = Rpi.cNumbPorta;
    
    	/* Chiamata a funzione per apertura file */
    	val = ManipolazioneFile(cPorta, 0);
      	Rpi.bPortaCreata = 1;
    }
    
  • Re: Problema con una struttura

    Rispondo nuovamente...

    In

    char *cPorta;

         /* copia numero porta da eseguire operazioni */
         cPorta = Rpi.cNumbPorta;


    Rpi è solo un tipo. Il dato lo devi ottenere dall'argomento passato che è Port ed è un puntatore.
  • Re: Problema con una struttura

    OOOPS!
    che st.. non me ne ero accorto

    Grazie
Devi accedere o registrarti per scrivere nel forum
5 risposte