STL VECTOR Problem



  • Hi ich wollte nur wissen wie der Funktionskopf des Copy Konstructor aussehne soll.

    So ich hab noch mir selber eine versuchs Klasse geschrieben wo das klappt.
    Und ich weiss nicht warum das bei dieser Klasse klappt und bei der anderen nicht. Könnte mir jemand ne antwort darauf geben

    #include <vector>
    #include <iostream>
    #include <Windows.h>
    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;
    class versuch;
    typedef vector<versuch,allocator<versuch> > versuchvector;

    class versuch
    {
    public:
    versuch()
    {
    strcpy(name,"Hallo");
    }
    versuch(versuch *a)
    {
    strcpy(name ,a->name);
    }

    ~versuch()
    {
    }
    static versuchvector vvv;
    char name[10];

    };

    versuchvector versuch::vvv;

    int main()
    {

    versuch versuch1;
    versuch::vvv.push_back(versuch1);
    cout<<versuch::vvv[0].name;
    int a;
    cin>>a;
    return 0;
    }
    [/code]



  • .filmor schrieb:

    Der benötigte Copy-Konstruktor hat AFAIK die Signatur Typ (const Typ&).

    Nein, denn siehe Standard 12.8 2 (Auszug)

    A nontemplate constructor for class X is a copy constructor if its first parameter is of type X&, const X&, volatile X& or const volatile X&, and either there are no other parameters or else all other parameters have default arguments (8.3.6).



  • Mkay



  • Wo ist das Problem in meiner Klasse?????????
    Und wie seht der Funktionskopf aus um eine für die Vector Datenstruktur eine angmessenen CopyKonstruktor zu übergeben



  • Na toll. ich hatte auch mal so ein ähnliches problem!!!!!
    Habe aber keine Lösung gefunden vielleicht hat ja einer von euch ne lösung



  • Cefour schrieb:

    Wo ist das Problem in meiner Klasse?????????

    Das hat .filmor doch schon in seinem ersten Beitrag geschrieben.

    Und wie seht der Funktionskopf aus um eine für die Vector Datenstruktur eine angmessenen CopyKonstruktor zu übergeben

    Schaffst du es nicht, an der passende Stelle ein const einzufügen?



  • Wenn da ein const notwendig ist, ist der Compiler nicht standardkonform (siehe mein Post).



  • Was ist denn 'allocator<>'? Wenn das die Standard-Allokatorklasse ist, kannst du sie bei der Definition auch weglassen.

    Zweitens: Wozu brauchst du dort den <iostream>-Header?

    Drittens: Pack' die Definition der statischen Elemente lieber in die "user.cpp", sonst bekommst du später Linker-Fehler.

    Viertens: Wie lautet der genaue Wortlaut des Fehlers und in wlecher Zeile tritt er auf?



  • Braunstein schrieb:

    Wenn da ein const notwendig ist, ist der Compiler nicht standardkonform (siehe mein Post).

    Wie kommst du darauf? 20.1.3. erfordert doch IMHO ausdrücklich die Äquivalenz bei einer Erzeugung aus const T.



  • Er erzeugt doch aber garnicht aus const T oder übersehe ich hier was?



  • Braunstein schrieb:

    Er erzeugt doch aber garnicht aus const T oder übersehe ich hier was?

    Der Elementtyp von std::vector muss die Eigenschaft "copyconstructible" erfüllen, und das beinhaltet Konstruierbarkeit aus const T.



  • Ok, jetzt ist alles klar. Ich hab doch glatt übersehen, dass push_back const T& als Argument übernimmt.


Anmelden zum Antworten