PDA

View Full Version : [c++] help


annamariavivo
02-05-2009, 17:17
ho questo codice e di c++ n ne capisco molto, ringrazio anticipatamente chiunque potesse aiutarmi:
// libreria della tesina

// Parametri di configurazione del servizio di posta
#define LEN_INDIRIZZO 20 // Lunghezza di un indirizzo (campo mittente e campo destinatario)
#define LEN_OGGETTO 50 // Lunghezza del campo oggetto
#define LEN_TESTO 300 // Lunghezza del campo testo
#define LEN_PSW 15 // Lunghezza della password
#define MAX_UTENTI 7 // Numero massimo di utenti = caselle di posta
#define MAX_MESSAGGI 10 // Numero massimo di messaggi per ciascun utente
#define MAX_CARATTERI 1000 // Numero massimo di caratteri che si possono digitare

// Struttura dell'account
typedef struct {
char indirizzo[LEN_INDIRIZZO];
char password[LEN_PSW];
} UTENTE;

// Struttura dell'email.
typedef struct {
char mMittente[LEN_INDIRIZZO];
char mDestinatario[LEN_INDIRIZZO];
char mOggetto[LEN_OGGETTO];
char mTesto[LEN_TESTO];
} MESSAGGIO;

// Nome dei semafori.

#define USER_SEM_FILE "SemaforoUtenti"
#define MESSAGE_SEM_FILE "SemaforoMessaggi"

// Definizione di funzioni comuni ai due programmi.

#define GestioneErrori(s) {
printf("%s\n", s);
ExitProcess(EXIT_FAILURE);
}

#define WaitForManyObjects(semaforo, numero, attesa) {
int contatore;
for (contatore = 0; contatore < numero; contatore++)
WaitForSingleObject(semaforo, attesa);
}


gli errori sono:

c:\documents and settings\annarita\desktop\tesinalibreria.h(35) :error C2501: 'printf' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(35) : error C2373: 'printf' : redefinition; different type modifiers
c:\programmi\microsoft visual studio\vc98\include\stdio.h(329) : see declaration of 'printf'
c:\documents and settings\annarita\desktop\tesinalibreria.h(35) : error C2078: too many initializers
c:\documents and settings\annarita\desktop\tesinalibreria.h(36) : error C2501: 'ExitProcess' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(36) : error C2373: 'ExitProcess' : redefinition; different type modifiers
c:\programmi\microsoft visual studio\vc98\include\winbase.h(1665) : see declaration of 'ExitProcess'
c:\documents and settings\annarita\desktop\tesinalibreria.h(37) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(37) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(37) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before 'for'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ')' before ';'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2501: 'contatore' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '<'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '++'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2501: 'contatore' : missing storage-class or type specifiers
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2086: 'contatore' : redefinition
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2143: syntax error : missing ';' before '++'
c:\documents and settings\annarita\desktop\tesinalibreria.h(41) : error C2059: syntax error : ')'
c:\documents and settings\annarita\desktop\tesinalibreria.h(43) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(43) : error C2143: syntax error : missing ';' before '}'
c:\documents and settings\annarita\desktop\tesinalibreria.h(43) : error C2143: syntax error : missing ';' before '}'

_Claudio
03-05-2009, 10:20
Il codice da te riportato è codice C e non C++.
Ci sono moltissimi errori, li ho corretti e ti riporto una versione corretta anche se non è possibile testarla non potendo compilare ed eseguire un singolo file di intestazione (.h), spero funzioni...


#define LEN_INDIRIZZO 20 // Lunghezza di un indirizzo (campo mittente e campo destinatario)
#define LEN_OGGETTO 50 // Lunghezza del campo oggetto
#define LEN_TESTO 300 // Lunghezza del campo testo
#define LEN_PSW 15 // Lunghezza della password
#define MAX_UTENTI 7 // Numero massimo di utenti = caselle di posta
#define MAX_MESSAGGI 10 // Numero massimo di messaggi per ciascun utente
#define MAX_CARATTERI 1000 // Numero massimo di caratteri che si possono digitare

// Struttura dell'account
typedef struct {
char indirizzo[LEN_INDIRIZZO];
char password[LEN_PSW];
} UTENTE;

// Struttura dell'email.
typedef struct {
char mMittente[LEN_INDIRIZZO];
char mDestinatario[LEN_INDIRIZZO];
char mOggetto[LEN_OGGETTO];
char mTesto[LEN_TESTO];
} MESSAGGIO;

// Nome dei semafori.

#define USER_SEM_FILE "SemaforoUtenti" //a cosa serve?
#define MESSAGE_SEM_FILE "SemaforoMessaggi" //a cosa serve?

// Definizione di funzioni comuni ai due programmi.

void GestioneErrori(char* s) {
printf("%s\n", s);
ExitProcess(EXIT_FAILURE);
}

void WaitForManyObjects(HANDLE semaforo, int numero, int attesa) { // dai un occhio a WaitForMultipleObects che fa parte della libreria standard di windows
int contatore;
for (contatore = 0; contatore < numero; contatore++) WaitForSingleObject(semaforo, attesa);
}

BrutPitt
03-05-2009, 12:54
Manca il backslasch nei defines per poter andar a capo.
Credo che cosi' possa funzionare:

#define GestioneErrori(s) {\
printf("%s\n", s);\
ExitProcess(EXIT_FAILURE);\
}

#define WaitForManyObjects(semaforo, numero, attesa) {\
int contatore;\
for (contatore = 0; contatore < numero; contatore++)\
WaitForSingleObject(semaforo, attesa);\
}

P.S.
Dopo il backslash non ci deve essere alcun carattere, nemmeno uo spazio, solo un "a capo".

_Claudio
03-05-2009, 20:03
ma... ma... sono veramente funzioni definite nel preprocessore?
Oddio ma è terribile...

DanieleC88
04-05-2009, 09:46
Oddio ma è terribile...
L'hai detto... :asd:

annamariavivo
06-05-2009, 09:56
ho provato a modifica re il codice come mi avevi detto e mi ha dato i seguenti errori:




1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: '*' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2065: 's' : undeclared identifier
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2365: 'printf' : redefinition; previous definition was 'function'
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(287) : see declaration of 'printf'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2078: too many initializers
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C2365: 'ExitProcess' : redefinition; previous definition was 'function'
1> c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(3391) : see declaration of 'ExitProcess'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'n' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'a' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2009: reuse of macro formal 'int'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : 'for'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ')' before ';'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '<'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '++'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2086: 'int contatore' : redefinition
1> c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : see declaration of 'contatore'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : ')'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1> c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(13) : see declaration of 'UTENTE'
1>server.cpp
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: '*' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2065: 's' : undeclared identifier
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2365: 'printf' : redefinition; previous definition was 'function'
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(287) : see declaration of 'printf'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(34) : error C2078: too many initializers
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(35) : error C2365: 'ExitProcess' : redefinition; previous definition was 'function'
1> c:\program files\microsoft sdks\windows\v6.0a\include\winbase.h(3391) : see declaration of 'ExitProcess'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(36) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 's' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'n' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2010: 'a' : unexpected in macro formal parameter list
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(38) : error C2009: reuse of macro formal 'int'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : 'for'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ')' before ';'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '<'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2143: syntax error : missing ';' before '++'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2086: 'int contatore' : redefinition
1> c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : see declaration of 'contatore'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(40) : error C2059: syntax error : ')'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2143: syntax error : missing ';' before '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(42) : error C2059: syntax error : '}'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(24) : error C2143: syntax error : missing ';' before '{'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(24) : error C2447: '{' : missing function header (old-style formal list?)
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(149) : warning C4002: too many actual parameters for macro 'WaitForManyObjects'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(259) : warning C4002: too many actual parameters for macro 'WaitForManyObjects'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(260) : warning C4002: too many actual parameters for macro 'WaitForManyObjects'
1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\server.cpp(343) : fatal error C1004: unexpected end-of-file found
Forse l'errore è dovuto al fatto che uso visual studio 2008 che non compila c ma c++,spero di non aver detto un'eresia ma non ne capisco molto di programmazione in c, e se è così potreste consigliarmi un compilatore di c per vista?

_Claudio
06-05-2009, 10:55
MSVC (il compilatore C/C++ microsoft) compila sia C che c++, basta fornire come estensione di file .c e lui compila usando le direttive C, per quanto riguarda gli header li compila comunque.

Se l'hai modificato come ti ho scritto io prova a modificarlo come ti ha consigliato BrutPitt... usando delle funzioni macro, anche se è una cosa da evitare come la peste.

Non ho guardato la sfilza di errori... comunque faresti bene a dare una restaurata generale al codice perchè senò non ne esci più, magari leggi qualche manuale veloce sul C che trovi ad esempio qui:
http://www.physics.drexel.edu/courses/Comp_Phys/General/C_basics/
http://www.cprogramming.com/tutorial/cpreprocessor.html

sottovento
06-05-2009, 13:15
Le modifiche suggerite da BrutPitt sono corrette. Probabilmente c'e' da modificare da un'altra parte.
Se vuoi puoi provare a postare il codice, magari comprensivo del progetto (cosi' e' piu' facile verificare perche' non ne vuole sapere di compilare)

annamariavivo
07-05-2009, 08:53
Dunque la specifica della tesina è:un servizio di E-mail limitato agli utenti di una
sola macchina. Le E-
mail scambiate tra i vari utenti devono essere
memorizzate su uno o
piu' file. In questo caso il servizio e'
gestito da un processo server
che accetta e processa
sequenzialmente le richieste di uno o piu'
processi client.

Il software del client deve fornire ad un utente
interattivo
un menu' con le seguenti funzioni:

1. Lettura di tutti i
messaggi ricevuti dall'utente.
2. Spedizione di un nuovo messaggio ad
uno qualunque degli altri utenti.
3. Lettura di tutti i messaggi
spediti dall'utente.
4. Cancellazione di un qualsiasi messaggio
ricevuto/spedito dall'utente.

Un messaggio deve contenere almeno
i campi Mittente, Destinatario, Oggetto e
Testo. La comunicazione tra
client e server deve sfruttare le code di
messaggi nel caso di sistema
UNIX/LINUX o i mailslot nel caso di
sistema Windows.

Quello che ho scritto io invece è questo (chiedo in anticipo scusa per le scemenze che sic avrò scritto):
// Server

#include <stdio.h>
#include <windows.h>
#include <io.h>

#include "../tesinalibreria.h"









// Funzione per la creazione dei file e dei semafori
void AvviaServer(
HANDLE *UserFile, // puntatore all'handle del file degli accounts
HANDLE *MessageFile, // puntatore all'handle del file dei messaggi
HANDLE *UserSem, // puntatore all'handle del semaforo per l'accesso all'elenco utenti
HANDLE *MessageSem) // puntatore all'handle del semaforo per l'accesso all'elenco messaggi
{
char *p;

// Verifico che il processo Server non sia già in esecuzione
*UserFile = OpenFile(File,
GENERIC_WRITE, // vedere il metodo open file
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
*MessageFile = OpenFile(File,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (*UserFile != NULL || *MessageFile!= NULL)
GestioneErrori("\tErrore nell'avvio del server di posta.\n\tVerificare che il servizio non sia già in esecuzione");

// Creo il file che conterrà i messaggi di posta
*MessageFile = CreateFile(File,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (*MessageFile == INVALID_HANDLE_VALUE) GestioneErrori("Errore nella CreateFile relativa ai messaggi.")
else {
p = (char *)MapViewOfFile(*MessageFile, FILE_WRITE, 0, 0, 0);
if (p == NULL) GestioneErrori("Errore nella MapViewOfFile relativa ai messaggi");
InizializzaMemoria(p, sizeof(MESSAGGIO), MAX_MESSAGGI); // Inizializzo la memoria messaggi.
}

// Creo i file che conterrà gli accounts
*UserFile = CreateFile(File,
GENERIC_WRITE,
0,
NULL,
TRUNCATE_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if (*UserFile == INVALID_HANDLE_VALUE) GestioneErrori("Errore nella CreateFile relativa agli utenti.")


// Creo i Semafori.
*UserSem = CreateSemaphore(NULL,
MAX_UTENTI,
MAX_UTENTI,
USER_SEM_FILE);
if (*UserSem == NULL) GestioneErrori("Errore nella CreateSemaphore relativa agli utenti.");
*MessageSem = CreateSemaphore(NULL,
MAX_UTENTI,
MAX_UTENTI,
MESSAGE_SEM_FILE);
if (*MessageSem == NULL) GestioneErrori("Errore nella CreateSemaphore relativa ai messaggi.");

printf("\tMail Server avviato correttamente.\n");
}





// Chiusura dei file e rilascio dei semafori
void FermaServer(
HANDLE UserFile,
HANDLE MessageFile,
HANDLE UserSem,
HANDLE MessageSem)
{
int err = 0;

if (UserSem != NULL) CloseHandle(UserSem);
else err++;
if (MessageSem != NULL) CloseHandle(MessageSem);
else err++;
if (UserFile != NULL) CloseHandle(UserFile);
else err++;
if (MessageFile != NULL) CloseHandle(MessageFile);
else err++;

if (err != 0) GestioneErrori("Si sono verificati degli errori durante la chiusura degli HANDLE.\n");
puts("\tIl Server di Posta e' stato fermato.");
}




// Creazione di un nuovo Account di Posta
void NuovoUtente(
HANDLE UserFile,
HANDLE UserSem)
{
UTENTE NewUser, RUser;
char *p;
int i , c = 0;

puts("\n\nCreazione di un nuovo Account di Posta:");
puts("---------------------------------------\n");

// Inserimento Username: almeno un carattere e non più del limite massimo
printf("Inserire il nuovo account di posta (Max %d caratteri).\nUserName>", (L_UTENTE - 1));
i = read(0, NewUser.account, L_UTENTE);
if (i == 1){
puts("\n\n\tLa UserName deve contenere almeno un carattere! \n\tImpossibile procedere alla creazione dell'account!\n\n");
return;
}
if ((i == L_UTENTE) && (NewUser.account[L_UTENTE-1] != '\n')){
puts("\n\n\tIl nome utente inserito e' troppo lungo! \n\tImpossibile procedere alla creazione dell'account!\n\n");
return;
}
NewUser.account[i - 1] = '\0';

// Inserimento Password: non più lunga del limite massimo
printf("Inserire la Password (Max %d caratteri).\nPassWord>", (L_PW-1));
i = read(0, NewUser.password, L_PW);
if ((i == L_PW) && (NewUser.password[L_PW-1] != '\n')){
puts("\n\n\tLa password inserita e' troppo lunga! \n\tImpossibile procedere alla creazione dell'account!\n\n");
return;
}
NewUser.password[i - 1] = '\0';

WaitForManyObjects(UserSem, MAX_UTENTI, INFINITE); // Decremento il Semaforo del massimo numero di utenti

BrutPitt
07-05-2009, 15:31
ho provato a modifica re il codice come mi avevi detto e mi ha dato i seguenti errori:


1>c:\users\annarita\documents\visual studio 2008\projects\email locale permanente\tesinalibreria.h(33) : error C2010: '*' : unexpected in macro formal parameter list
...
OMISSIS
...

Forse l'errore è dovuto al fatto che uso visual studio 2008 che non compila c ma c++,spero di non aver detto un'eresia ma non ne capisco molto di programmazione in c, e se è così potreste consigliarmi un compilatore di c per vista?

Quello quotato non e' tanto un errore per aver compilato in C++... quello lo ottieni se hai scritto una cosa del tipo:

#define GestioneErrori(char *s) {

che e' assolutamente errata.

Usa le correzioni alle macro parametrizzate che avevo precedentemente postato, e l'include si comporta come desideri.


Poi segui il consiglio di _Claudio, e per il VC++ rinomina i file in ".c" cosi' li compilera' come richiedi.
(esiste un'altra procedura... ma questa e' la piu' semplice)

Per quanto riguarda il codice da te postato... posso dirti:

File non e' definito... per nessuna OpenFile... ed e' sempre lo stesso!
L_PW la usi al posto di LEN_PASSWORD
L_UTENTE non e' definita... ma non e' definita nemmeno il membro account della struttura UTENTI che hai nell'include (almeno in quello che hai postato all'inizio).

Ma questa e' solo una rapida occhiata... e sono errori davvero elementari.
Nel senso che ti verrebbero segnalati dal compilatore e che con una corretta interpretazione in lettura, sono facilmente risolvibili.
Ovviamente risolvibili da TE... che dovresti sapere cosa andrai a "costruire".

Diverso e' un errore tipo:
read(0, NewUser.account, L_UTENTE) (che non viene segnalato) in cui leggi da un HANDLE nullo... magari pensando di averlo aperto con OpenFile.
Se usi read(...) lo apri con open(...)... se usi OpenFile(...) leggi con ReadFile(...)

annamariavivo
09-05-2009, 13:35
grazie bruttpitt per i consigli adesso va molto meglio ho solo riscontrato i seguenti errori nel server:
1>c:\users\annarita\desktop\server.c.cpp(15) : error C2065: 'HANDLE' : undeclared identifier
1>c:\users\annarita\desktop\server.c.cpp(15) : error C2065: 'UserFile' : undeclared identifier
1>c:\users\annarita\desktop\server.c.cpp(19) : error C2448: 'AvviaServer' : function-style initializer appears to be a function definition
1>c:\users\annarita\desktop\server.c.cpp(201) : error C2146: syntax error : missing ')' before identifier 'UserFile'
1>c:\users\annarita\desktop\server.c.cpp(202) : error C2059: syntax error : ')'
grazie ancora