Dynamische Arrays mit festem Datentyp



  • Hallo,

    ich benötige ein geordnetes Feld dynamischer Größe, in welches ich beliebig viele gleichartige Objekte hineinlegen kann.

    Ich habe es bereits mit Vektoren versucht, aber ich bekomme beim Compilieren folgenden Fehler:

    c:\programme\microsoft visual studio\vc98\include\xmemory(39) : warning C4100: '_P' : Unreferenzierter formaler Parameter
    c:\programme\microsoft visual studio\vc98\include\xmemory(41) : warning C4100: '_P' : Unreferenzierter formaler Parameter
    c:\programme\microsoft visual studio\vc98\include\vector(249) : warning C4663: Aenderung der Sprache C++: Verwenden Sie folgende Syntax, um die Template-Vorlage 'vector' explizit zu spezialisieren:
            Vorlage<> class vector<bool,class std::allocator<unsigned int> > ...
    c:\programme\microsoft visual studio\vc98\include\vector(156) : warning C4018: '<' : Konflikt zwischen signed und unsigned
            c:\programme\microsoft visual studio\vc98\include\vector(156) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::vector<unsigned int,class std::allocator<unsigned int> >::insert(unsigned int *,unsigned int,const unsigned int &)
    ' der Klassenvorlage
    c:\programme\microsoft visual studio\vc98\include\vector(167) : warning C4018: '<' : Konflikt zwischen signed und unsigned
            c:\programme\microsoft visual studio\vc98\include\vector(156) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::vector<unsigned int,class std::allocator<unsigned int> >::insert(unsigned int *,unsigned int,const unsigned int &)
    ' der Klassenvorlage
    c:\programme\microsoft visual studio\vc98\include\xmemory(37) : warning C4100: '_P' : Unreferenzierter formaler Parameter
            c:\programme\microsoft visual studio\vc98\include\xmemory(68) : Siehe Verweis auf Instantiierung der kompilierten Funktionsvorlage 'void __cdecl std::_Destroy(unsigned int *)'
    

    Was geht da ab?
    Wie habe ich den "Syntax-Vorschlag" zu verstehen? 😕

    Als Standalone-Konsolenanwendung klappt das mit den Vektoren, als Lib innerhalb eines MFC-Projekts kommt dieser Fehler.

    Welche Alternativen gibt es zu Vektoren?

    Gruß, Thomas.



  • Zeig uns doch mal den Quellcode:

    Ein std::vector muss wie der Compiler-Meldung zu entnehmen ist, wie folgt definiert werden (wobei es natürlich noch weitere Konstruktoren gibt...):

    std::vector<T> v; // Wobei T für einen Datentyp steht. Z.B. int, double, std::string
    

    Beispiel-Programm, das beliebig viele Ganzzahlen einließt. (Ungetestet)

    #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
            vector<int> v; // einen vector v vom Typ int mit 0 Elementen anlegen.
            cout << "\n Bitte Ganzzahlen eingeben: (Abruch mit einer anderen Taste)\n";
            int tmp;
            while(cin >> tmp)
                 v.push_back(tmp);
    
            cout << "\n Die eingegebenen Zahlen lauten:\n";
            for(vector<int>::iterator i = v.begin(); i != v.end(); ++i)
                     cout << *i << ", ";
    
            return 0;
    }
    

    Caipi



  • Wie gesagt, als Konsolenanwendung geht das bestens, also muss zumindest meine Syntax stimmen.

    Sobald ich die Klasse aber in eine statische Bibliothek packe und sie anderswo include, bekomme ich eben jenen Compilerfehler.



  • Das sind doch alles nur Warnungen... - Sprich: es sollte sich (im Normalfall) zumindest kompilieren lassen (es gibt moeglicherweise einen Schalter, mit dem auch bei Warnungen die Compilierung abgebrochen wird). Und bis auf die Warnung in Zeile 246 sind alle kein Problem, wobei diese auch nicht schwerwiegend zu sein scheint, mir sagt sie nur noch soo viel...und ohne Code schon garnicht.

    Gruss,
    DeSoVoDaMu



  • DeSoVoDaMu: Bete, dass ich niemals einen Code von dir überarbeiten muss!



  • wie legst du ein dynamisches array an??(natürlich musst du stdlib includen

    int *arr;
    int size;
    //lese einen integerwert für size ein
    size = (int *)malloc(size*sizeof(int));//array für integer werte
    //waenn arr NULL ist dann fehler bei malloc!!!
    

    😃



  • --linuxuser-- schrieb:

    wie legst du ein dynamisches array an??(natürlich musst du stdlib includen

    int *arr;
    int size;
    //lese einen integerwert für size ein
    size = (int *)malloc(size*sizeof(int));//array für integer werte
    //waenn arr NULL ist dann fehler bei malloc!!!
    

    😃

    Zuerstmal sind wir hier in der C++ Abteilung. Und weil wir deswegen öfters, wenn
    auch nicht in diesem speziellen Fall, mit Objekten zu tun haben, ist new/delete die bevorzugte Methode. 😉



  • DeSoVoDaMu: Bete, dass ich niemals einen Code von dir überarbeiten muss!

    Wo ist das Problem? Mir ist schon klar, dass Warnungen im allgemeinen ihren Sinn haben...ich beachte sie auch, nur ging es hier darum, dass Thomas++ sie als Fehler ansah. Ok, beim naechsten mal schreib ich "nur" in Anführungszeichen... 🙄

    Gruss,
    DeSoVoDaMu



  • Gib doch mal ein bisschen Code von den Stellen an denen die Warnungen auftreten.

    Ich schalte gerne diese Warnungen ab:

    // Vermeidet STL-Warnungen
    #pragma warning (disable: 4586)
    // Vermeidet Warnungen, dass ein Identifier zu lange ist.
    // Aufgrund der Templateschachtelung kann das bei STL öfters vorkommen.
    #pragma warning (disable: 4786)
    

Anmelden zum Antworten