Drk_alien Postat Aprilie 28, 2013 Partajează Postat Aprilie 28, 2013 Salutare, Incerc sa definesc structura asta in microC. struct student{ char nume[30]; char prenume[30]; int an; float medie;};student s[20];void main(){ s[1].nume ="Popescu";}Primesc erori de genul "; expected, but 's' found test.c" " 'student' Identifier redefined test.c" Ce nu fac bine?...m-am uitat si peste asta http://www.mikroe.com/download/eng/documents/compilers/mikroc/pro/pic/help/structures.htm dar tot primesc erori. Ma poate ajuta cineva cu un exemplu? Multumesc! Link spre comentariu
grifonul_alb Postat Aprilie 28, 2013 Partajează Postat Aprilie 28, 2013 struct student { char nume[30]; char prenume[30]; int an; float medie; };student s[20]; void main() { s[1].nume ="Popescu"; } Cred ca eroarea apare de la acel ";" pe care eu l-am colorat si marit . Link spre comentariu
Drk_alien Postat Aprilie 28, 2013 Autor Partajează Postat Aprilie 28, 2013 Din pacate aceleasi erori. E foarte ciudat . Am pus o imagine mai jos... Link spre comentariu
Ionut Pavel Postat Aprilie 28, 2013 Partajează Postat Aprilie 28, 2013 typedef struct student _STD_ { char nume[30]; char prenume[30]; }student; void main (void) { student s[20]; ADCON1 = 0; TRISB = 0; ........................... s.name = "abcdefghi"; } Structura e doar o definitie in C, ea nu implica o alocare de memorie. Greseala e la sfarsitul struct unde ai scris "student s[20]" Link spre comentariu
Drk_alien Postat Aprilie 29, 2013 Autor Partajează Postat Aprilie 29, 2013 Tu ai reusit sa compilezi bucata asta de cod? Eu am erori similare.Atentie structura trebuie definita in microC Pro, deoarece doresc sa memorez informatii despre niste butoane pe care le voi desena pe un lcd de 3310.Momentan ma lupt sa fac structura sa mearga. Link spre comentariu
godFather89 Postat Aprilie 29, 2013 Partajează Postat Aprilie 29, 2013 #include <string.h>struct student{ char nume[30]; char prenume[30];};void main_test(void){ struct student s[20]; strcpy(s[0].nume, "acbacd");} fie #include <string.h>typedef struct{ char nume[30]; char prenume[30];} student;void main_test(void){ student s[20]; strcpy(s[0].nume, "acbacd");} Link spre comentariu
Drk_alien Postat Aprilie 29, 2013 Autor Partajează Postat Aprilie 29, 2013 Am tot compilat in C++, si in microC si am ajuns la o varianta , cu ajutorul lui Ionut. Varianta care compileaza pt microC, se pare ca trebuie sa fiu foarte atent la declararea variabilelor typedef struct student{ char *nume;//asa compileaza// char nume[20];//asa NU}student;void main (void){ student s[20]; s[1].nume = "Daniel";} ps: godFather89, atat prima varianta cat si a doua functioneaza. Multumesc. Link spre comentariu
godFather89 Postat Aprilie 29, 2013 Partajează Postat Aprilie 29, 2013 Nu sunt sigur daca intelegi de ce nu merge varianta cu "char nume[20]". Motivul este simplu: in C/C++ nu se pot copia vectori prin atribuire. Cand declari nume ca pointer, ii atribuie adresa catre un string definit static (deci nu il copiaza). Problema e ca daca string-ul se dezaloca, pointerul nu mai este valid si o sa te trezesti cu tot felul de bug-uri. De exemplu: typedef struct { char *nume;}student;void initializeaza(student *s){ s->nume = "Daniel";}void main (void){ student s[20]; initializeaza(&s[1]); //aici s[1].nume nu mai e valid!} In functia initializeaza, "Daniel" va fi o zona alocata static (pe stiva) a carei adresa se va seta in pointerul nume. Problema e ca stiva se elibereaza la iesirea din functie iar pointerul nu va mai fi valid in main. Solutia e: -fie folosesti nume ca pointer si ii aloci memorie dinamic. In felul asta nu va mai pointa catre stiva. -fie folosesti un array si memoria pentru nume va fi alocata static unde se declara variabila (in cazul de mai sus, in main). In ambele cazuri, trebuie copiate valorile de pe stiva cu strcpy (sau cu alta functie similara). Link spre comentariu
Drk_alien Postat Aprilie 29, 2013 Autor Partajează Postat Aprilie 29, 2013 Am prins ideea . Mersi.ps: nu am mai avut treaba cu c++ - ul de cativa ani buni si am cam uitat detalii minore dar esentiale. Link spre comentariu
Drk_alien Postat Aprilie 29, 2013 Autor Partajează Postat Aprilie 29, 2013 Bun, am inteles cu structurile...dar acum vin clasele Am codul de mai jos pe care il pun in microC... (cel de jos) da o gramada de erori ex: 1) Specifier needed, 2) Invalid declarator expected'(' or identifier, 3) '' Identifier redefined Pe scurt daca nu asa...atunci cum se declara o clasa ?Are microC-ul ceva diferit?...vreo versiune de c++ ?? //codul in C++ care merge#include <iostream>using namespace std;class CRectangle { int x, y; public: void set_values (int a, int b) { x = a; y = b; } int area () { return (x*y); }};int main () { CRectangle rect; rect.set_values (3,4); cout << "area: " << rect.area(); return 0;}//#################### mai jos codul in microC #####################using namespace std;class CRectangle { int x, y; public: void set_values (int a, int b) { x = a; y = b; } int area () { return (x*y); }};void main () { CRectangle rect; rect.set_values (3,4); // cout << "area: " << rect.area();} Link spre comentariu
Drk_alien Postat Aprilie 29, 2013 Autor Partajează Postat Aprilie 29, 2013 ...deci microC foloseste evident C, iar C-ul nu stie clase ...doamne... trebuie sa imi revizuiesc cunostintele despre c si c++ Link spre comentariu
Bandi Szasz Postat Mai 1, 2013 Partajează Postat Mai 1, 2013 De ce vrei sa folosesti clase ? Pentru date fa structuri. Pentru functi (void()) frumos separate si gata. Nu faci tu cu PIC ul un joc de 1 giga unde trebuie salvat offseturi/Pointere etc...mikroC nu suporta clase pentru ca clasele se folosesc pentru a stoca date dinamice in format BYTE sau pentru "reversing engineering" unde se descompune un dll in code _asm si se definesc addrese de memorie spatii intre ele , etc un pic inalt pentru tine. In orice caz nu vad rostul de a utiliza clase in PIC pentru ca PIC ul este un simplu cip. Nu are mult RAM asa cum are un PC unde se pot stoca gigabyte de date dinamice. Si chiar nu inteleg in ce scop vroiai sa le utilizezi. Link spre comentariu
godFather89 Postat Mai 1, 2013 Partajează Postat Mai 1, 2013 Clasele fac mai simpla abstractizarea. Si eu le-as folosi oricand. Nu se compara cu un struct. Link spre comentariu
Drk_alien Postat Mai 5, 2013 Autor Partajează Postat Mai 5, 2013 Da....pe undeva are dreptate bandi12, dar clasele fac codul "m-ai curat", in fine...fiecare cu ideile lui. Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum