Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Array aus Objekten initialisieren

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
08.12.2006, 00:09 Uhr
Yadgar



High!

Nach einem längeren Ausflug in die Welt von Access und MySQL komme ich wieder dazu, mich mit meinem Grafikprogramm-Projekt YIP ("Yadgar's Image Processor") zu beschäftigen... letzter Stand der Dinge war ja, dass ich eine Klasse für Grafikbearbeitungskommandos (das Programm soll fürs erste kommandozeilenorientiert sein) programmiert hatte:


C++:
class Command
{
   private:
      string name; // der Befehl selbst
      unsigned short params; // Anzahl der erforderlichen Parameter
      string helptxt; // Kurzbeschreibung, die nach dem Befehl --help angezeigt wird
      string errormsgs[]; // Fehlermeldung(en)
   public:
      Command(string in_name, unsigned short in_params, string in_helptxt, string in_errormsgs[]); // Konstruktor
};



Damit eine (globale) Parser-Funktion den an main() übergebenen Eingabestring auf gültige Befehlswörter und deren etwaige Parameter überprüfen kann, sollte es ein globales Array mit Command-Objekten geben... die Frage ist nur: wie initialisiere ich so ein Gebilde?

Kann ich Array und einzelne Command-Objekte in einem Schritt initialsieren, etwa so:


C++:
const unsigned short nCommands = 2; // Anzahl der bereits implementierten Befehle

Command commands[nCommands]
{
   commands[0]
  (
     "--help",
     0,
     "Listet alle verfügbaren Befehle mit Kurzbeschreibungen auf",
    { "Parameter wurde ignoriert" } // --help kommt ohne Parameter aus
   ),
   commands[1]
  {
     ....
  }
   commands[2]
   {
      ....
   }
};



- oder muss ich erst die einzelnen Command-Objekte jedes für sich erzeugen und erst in einem zweiten Schritt das Command-Array mit den fertigen einzelnen Command-Objekten füllen?

Und wie initialisiere ich das String-Array mit den kommandospezifischen Fehlermeldungen innerhalb des Command-Objekts? Ist die obige Schreibweise korrekt?

Bis bald im Khyberspace!

Yadgar

Now playing: Discovery (Michael Garrison)
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
08.12.2006, 01:25 Uhr
J-jayz-Z
Perl Crack ala Carte
(Operator)


Stimmt fast:

C++:
#include <iostream>

class Foo
{
private:
    std::string bar;
    std::string blubb;

public:
    Foo(std::string first, std::string second)
    {
        this->bar = first;
        this->blubb = second;
    }

    std::string getBar()
    {
        return this->bar;
    }

    std::string getBlubb()
    {
        return this->blubb;
    }
};

int main() {
  Foo arr[] = { Foo("eins","zwei"),Foo("drei", "vier") };

  std::cout << arr[0].getBar().c_str() << std::endl;

  std::cin.get();
  return EXIT_SUCCESS;
}

--
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="66756e2d736f66742e6465"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

Dieser Post wurde am 08.12.2006 um 01:43 Uhr von J-jayz-Z editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
08.12.2006, 11:20 Uhr
Yadgar



High!


Zitat von J-jayz-Z:
Stimmt fast:



Also Array initialisieren und innerhalb des Arrays "temporäre" Initialisierungen der Einzelobjekte ohne Variablennamen?

Aber wie bekomme ich innerhalb des einzelnen Command-Objektes das Mitglied-Array mit den Fehlermeldungen initialisiert?

Bis bald im Khyberspace!

Yadgar
--
Flagmaker - ein Programmier-Blog
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
08.12.2006, 13:18 Uhr
0xdeadbeef
Gott
(Operator)



Zitat von Yadgar (sinnerhaltend gekürzt):


C++:
class Command
{
   private:
      string errormsgs[]; // das wird so nichts
};




string[] ist ohne Index ein unvollständiger Datentyp, will sagen, der Compiler weiß nicht, wie viel Platz er dafür vorhalten muss. Unvollständige Datentypen können nicht als Membervariablen benutzt werden, allenfalls kann man eine Referenz oder einen Zeiger darauf vorhalten. Wenn du nicht weißt, wie lang das Array sein soll, empfiehlt sich

C++:
class Command {
  std::vector<std::string> errormsgs;
}


Und dann geht da ganz einfach

C++:
static std::string const foo[] = { "bar", "baz", "qux", "quux", "quuux", "xyzzy" };
std::vector<std::string> v(foo, foo + 6);


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 08.12.2006 um 13:20 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.12.2006, 15:14 Uhr
Spacelord
Hoffnungsloser Fall


www.fun-soft.de/showtopic.php?threadid=16255&post_start=0&time=

--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: