001
09.07.2008, 20:37 Uhr
0xdeadbeef
Gott (Operator)
|
Aaalso, zum einen spricht man ein Array über einen Index an, zum anderen weist man ihm auch Werte zu, die es beinhalten kann. Im Fall eines char-Arrays also einzelne Zeichen (character). Das sieht dann z.B. so aus:
...statt gpsdata = " ";
Zum nächsten sind Arrays in C++ in dieser Form einfach platte Speicherbereiche, keine komplexen Datentypen; das heißt, sie haben keine Methoden oder Attribute. Dementsprechend wird
nicht kompilieren. Du hast hier drei Möglichkeiten; entweder, du benutzt das flache Array und kodierst die Länge fest, also
C++: |
for(int i = 0; i < 23; ++i)
|
...oder du greifst auf von C vererbte Mechanismen zurück:
C++: |
for(int i = 0; i < sizeof(gpsdata); ++i)
|
...wobei es hier einige Feinheiten zu verstehen gilt. sizeof(x) gibt die Menge von Bytes im Speicher, die x belegt, zurück. In diesem Fall ist das 23, weil gpsdata 23 Elemente hat und diese Elemente jeweils ein Byte groß sind. Im Fall eines int-Arrays zum Beispiel wäre es notwendig, sizeof(gpsdata) / sizeof(gpsdata[1]) zu schreiben. Außerdem wird sizeof zur Compilezeit aufgelöst, das heißt, wenn du das Array als Zeiger irgendwohin weiterreichst, funktioniert der Trick nicht mehr.
Die C++-igste Methode wäre wohl die Verwendung von std::vector, bzw. std::string, je nach Verwendung. Zum Beispiel:
C++: |
// gps.hh
#include <vector>
class gps { public: gps();
private: std::vector<char> gpsdata; }
// gps.cc
#include "gps.hh"
gps::gps() : gpsdata(23) { for(int i = 0; i < gpsdata.size(); ++i) { gpsdata[i] = ' '; } }
// Wobei hier auch einfach // gps::gps() : gpsdata(23, ' ') { } // ginge
|
Zum Letzten, main ist keine Klassenmethode, sondern eine globale Funktion. Es macht keinen Sinn, sie in die Klasse gps zu schreiben. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra |