wastl: Endlose Parameter in C++

Hallo,

ich habe mit folgendem Code Probleme:(Ich verwende GNU/Linux und g++/gcc)

  
EineKlasse array(int key = 0, ...)  
{  
 EineKlasse tmp;  
 // ...  
 // ein wenig mehr code  
 // ...  
 return tmp;  
}  
  
// irgendwo anders im Programm:  
array(0, "lol", "hans", "peter", "selfhtml", "wastl");  

Das wird dann mit g++ compiliert mit folgender Meldung für jeden Aufruf dieser Funktion:

[DATEI]:[ZEILENNUMMER]: Warnung: Objekte des Nicht-POD-Typs »class EineKlasse« können nicht über »...« übergeben werden; Aufruf wird zur Laufzeit abbrechen

Was ist falsch?
Der Code ist übrigens nicht von mir. Ich habe zuvor nicht einmal gewusst das solche Konstruktionen möglich sein sollen.

Ich hätte da noch ein Problem:

  
ostream &operator<<( ostream &out, const EineKlasse &var )  
{  
 // ...  
 // wieder ein wenig code hauptsächlich if's  
 // ...  
}  
// und in der EineKlasse habe noch folgende Zeile gefunden:  
friend ostream &operator<<( ostream &out, const php_var &var );  

Hier erhalte ich folgende Meldung:
[DATEI]: In function »std::ostream& operator<<(std::ostream&, const EineKlasse&)«:
[DATEI]:[ZEILENNUMMER]: Warnung: Kontrollfluss erreicht Ende einer Nicht-void-Funktion

es fehlt also möglicherweise ein return?!
Nur was soll denn hier zurückgegeben werden?
ostream ist mir nicht geläufig.

Grüße wastl

  1. Ich habe mich nun ein wenig erkundigt:

    POD ist die Abkürzung für englisch plain old data. Damit werden in C++ einfache Datentypen sowie Klassen und Strukturen bezeichnet, die kein "verstecktes" Datenelement enthalten, das auf die Vtbl verweist.

    Etwas vereinfacht gesagt sind PODs diejenigen Typen, die C++ mit C gemeinsam hat.

    Und ich habe auch ein paar Beispiele zu dynamischen Argumentlisten gefunden und Dank des obigen Textes hab ich auch die Fehlermeldung verstanden.
    Da EineKlasse kein Standardtyp wie int, char usw. kann ich ihn nicht in dynamischen Argumentlisten übergeben.
    Ist das so richtig?
    Aber ich muss ihn übergeben!
    Gibt es wirklich keine Möglichkeit den g++ dazu zu bewegen diesen Code zu akzeptieren?

    Das andere Problem habe ich inzwischen gelöst mit dem fehlendem return.