Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Einem Array etwas zuweisen geht nicht

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
09.07.2008, 19:34 Uhr
elturco



Hii,

ich möchte ein Array durchlaufen und initialisieren. Mein Code sieht wie folgt aus:



C++:
#include <iostream>
#include <string>
using std::string;

class gps
{
public:
    char gpsdata[23];
    bool DataReceived;
    gps(){
            DataReceived = false;
            for(int i = 0;i<gpsdata.length;i++)
                gpsdata = " ";
        }
    int main(){}
};


Allerdings bekomme ich stets die Fehlermeldung:

Code:
1>c:\dokumente und einstellungen\resul\eigene dateien\visual studio 2008\projects\gps1\gps1\gps.cpp(13) : error C2440: '=': 'const char [2]' kann nicht in 'char [23]' konvertiert werden


Kann mir jemand weiterhelfen ?

Grüße,
elturco

Dieser Post wurde am 09.07.2008 um 19:42 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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:

C++:
gpsdata[i] = ' ';


...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

C++:
gpsdata.length


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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
09.07.2008, 20:41 Uhr
elturco



Danke Dir...

Kann ich das gleiche auch für Strings machen, wenn ich vorher using std::string; definiere ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
09.07.2008, 20:44 Uhr
0xdeadbeef
Gott
(Operator)


Meinst du ein Array von Strings? Klar:

C++:
#include <string>
#include <vector>

class gps {
public:
  gps();

private:
  std::vector<std::string> gpsdata;
}


...Rest wie gehabt, nur halt " " statt ' '. Von using-Direktiven würde ich zumindest in Headern Abstand nehmen; so was kann auf Interoperabilität mit anderen Bibliotheken äußerst miese Auswirkungen haben.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
09.07.2008, 21:06 Uhr
elturco



super !! danke Dir....
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: