Forum: problem med klasser

Forum huvudsida -> Programmering -> problem med klasser

Sidor: 1

Till botten

supermario89 04:04 - 22:a Juni 2006 | Post #1
Medlem
Inlägg: 12


Skicka PM
Jag har precis börjat med klasser och har en fråga
varför funkar inte följande kod?
  1.  
  2. #include <iostream>
  3. #include <stdio.h>
  4.  
  5. using namespace std;
  6.  
  7. struct person
  8. {
  9. int age;
  10. string gender;
  11. int weight;
  12. };
  13. person array[10];
  14. int main()
  15. {
  16. for(int i = 0 < 10; i++;)
  17. {
  18. array[i].age = 10*i;
  19. if ( i % 2 == 0)
  20. {
  21. array[i].gender = "Male";
  22. }
  23. else
  24. {
  25. array[i].gender = "Female";
  26. }
  27. array[i].weight = i+10;
  28. }
  29. for(int w = 0 < 10; w++;)
  30. {
  31. cout<<"Number: "<<w <<endl;
  32. cout<<"Age: "<<array[w].age <<endl;
  33. cout<<"Gender: "<<array[w].gender <<endl;
  34. cout<<"Weight: "<<array[w].weight <<endl;
  35. }
  36. cin.ignore();
  37. cin.get();
  38. }


-------------------------
Ingen signatur!



Celeron 08:18 - 22:a Juni 2006 | Post #2
Medlem
Inlägg: 418


Skicka PM
På vilket sätt funkar det inte? Får du felmeddelanden? Isf, posta dom. Sedan så är det en struct, inte en klass. Men din bok kanske tar upp struct's först så att man ska förstå lättare.

-------------------------
Det viktigaste är att ha roligt! Har ny hemsida: http://www.freewebs.com/cpperik/



Nissebosselasse 09:31 - 22:a Juni 2006 | Post #3
Medlem
Inlägg: 490


Skicka PM
Det första jag ser är string gender i stukturen: inkludera #include <string> i början av programmet.
Många kompilatorer släpper igenom det här, men det betyder ju inte att man inte ska inkludera vissa filer...

main måste dessutom returnera ett svar (den är deklarerad som en funktion som ger tillbaka ett heltal - int), så lägg till return 0; i slutet av funktionen.

De båda for-satserna är dessutom felkonstruerade. En dylik loop har följande syntax:
  1.  
  2. for (initiering; villkor; uppräkning) {
  3. // Satser att utföra
  4. }

Du har slagit ihop initieringen och villkoret, så istället för att skriva:
  1.  
  2. for (int i = 0 < 10; i++;)

...bryt upp det till följande:
  1.  
  2. for (int i=0; i < 10; i++)

Ser du skillnaden? Initieringen blir: "tilldela i värdet noll", villkoret är "så länge i är mindre än 10", och uppräkningen är "öka i med ett för varje varv".
Anledningen till att du inte får något felmeddelanden av kompilatorn är egentligen helt normalt, eftersom man kan skriva som du skrev i for-satsen:
  1.  
  2. for (int w = 0 < 10; w++;)

I en for-sats får man utelämna vissa (eller alla) delarna. Med din ovanstående kod blir initieringen: "utvärdera uttrycket (0 < 10), och tilldela w det", villkoret blir "räkna upp w" (ett villkor som alltid är sant), och uppräkningen är "" (ingenting, du utelämnade det genom att bara skriva ett ensamt semikolon).
En evighetssats kan du alltså skriva på följande sätt:
  1.  
  2. for (;;) {
  3. // Satser här
  4. }


Här är den rätta versionen:
  1.  
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. struct person {
  8. int age;
  9. string gender;
  10. int weight;
  11. };
  12.  
  13. person array[10];
  14.  
  15. int main()
  16. {
  17. for(int i=0; i < 10; i++)
  18. {
  19. array[i].age = 10*i;
  20. if ( i % 2 == 0)
  21. {
  22. array[i].gender = "Male";
  23. }
  24. else
  25. {
  26. array[i].gender = "Female";
  27. }
  28. array[i].weight = i+10;
  29. }
  30.  
  31. for(int w = 0; w < 10; w++)
  32. {
  33. cout << "Number: " << w << endl;
  34. cout << "Age: " << array[w].age << endl;
  35. cout << "Gender: " << array[w].gender << endl;
  36. cout << "Weight: " << array[w].weight << endl;
  37. cout << endl;
  38. }
  39. cin.ignore();
  40. cin.get();
  41.  
  42. return 0;
  43. }


-------------------------
http://pushingcows.se
Gula Nallen



supermario89 15:19 - 22:a Juni 2006 | Post #4
Medlem
Inlägg: 12


Skicka PM
Tack förhjälpen, det där hjälpte verkligen Smiley

-------------------------
Ingen signatur!



Sidor: 1

Forum huvudsida -> Programmering -> problem med klasser
Atom feed

Du får inte posta i den här tråden | Till toppen