Ergebnis 1 bis 5 von 5
  1. #1
    Das Leben ist der Lehrer Avatar von DoS
    Registriert seit
    18.08.2008
    Beiträge
    528

    Standard "vektor kann nicht in string konvertiert werden" (sinngemäß)

    Hallo,
    ich habe mal wieder eine Frage zu meinem Lieblingsthema im Moment :

    Vektoren und Strings .

    Folgender Codeausschnitt sorgt für Probleme:

    vector<string> Daten;
    vector<string>::iterator i;

    string *pDaten=NULL;
    pDaten=&Daten;
    Diese schöne Fehlermeldung bekomme ich als Belohnung:


    1>c:\dokumente und einstellungen\dragon_of_storm\eigene dateien\visual studio 2008\projects\test6\test6\gasdf.cpp(136) : error C2440: '=': 'std::vector<_Ty> *' kann nicht in 'std::string *' konvertiert werden
    1> with
    1> [
    1> _Ty=std::string
    1> ]
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    Soweit so gut, aber wie kann ich jetzt dafür sorgen, dass ich eine solche Fehlermeldung nicht mehr bekomme (auch, wenn sie so schön anzusehen ist )?

    Eure Meinung ist gefragt :p (oder, wie sagen die das immer im Fernsehen [lange Fernsehen gucken macht blöd ]) .

    Ich bin schon gespannt auf eure Lösung

    MfG. -DoS
    Legende: "Gruß" = kaum Zeit, "MfG." = durchschnittlich viel Zeit und "Mit freundlichen Grüßen" = viel Zeit
    gehabt beim Posten.


    Folgende Personen genießen meine Hochschätzung: BlackBerry, EBFE, DizzY_D, OpCodez, l0dsb und H4x0r007.

  2. #2
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Wie stellst du dir das vor?
    Vector in String.

    Sagen wir mal du hast einen Beutel mit Äpfeln (ein Apfel entspricht hierbei dem String, der Beutel dem Vector und die Äpfel im Beutel den Elementen des Vectors) und versuchst nun alle Äpfel in diesem Beutel in einen anderen Apfel zu quätschen.
    10 Äpfel in einen Apfel.
    Wie soll das gehen?

    Das macht doch keinen Sinn!

    EDIT:
    Das selbe lässt sich über die Fehlermeldung sagen.
    error C2440: '=': 'std::vector<_Ty> *' kann nicht in 'std::string *' konvertiert werden

    Du hast deine Zuweisung:
    zeiger_auf_string = zeiger_auf_vector<whatever>;

    Das ist so als würdest du Äpfel Birnen zuweisen.
    apfel = birne;
    (... was in einigen Programmiersprachen - bzw. Skriptsprachen durchaus möglich ist - in C++ jedoch nicht)

    Also entweder du benutzt einen Cast ("Typecasting" - schau mal in deinem Buch nach), um die Datentypen anzugleichen, oder du überlegst dir nochmal ob es überhaupt Sinn macht in einem Zeiger auf einen String die Adresse von einem Vector von Strings speichern zu wollen...

    EDIT2:
    Ich meine zwar, du solltest dich wirklich nochmal fragen warum und wieso du das machen willst, aber hier ist der C++-Weg um Birnen in Äpfel zu verwandeln.

    Code:
    #include <string>
    #include <vector>
    
    
    using namespace std;
    
    int main(void)
    {
        vector<string> meinVector;
        string *meinStringPtr;
        
        // macht zwar keinen Sinn, aber funktioniert nunmal...
        meinStringPtr = reinterpret_cast<string *> (&meinVector);
        
        return 0;
    }
    Bitte erwarte aber nicht, nachher auch sowas mit dem String machen zu können:
    *meinStringPtr = "Hello, World!";

    Das führt unweigerlich zu einem Laufzeitfehler!
    Geändert von blackberry (22.08.2009 um 18:51 Uhr)

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  3. #3
    Das Leben ist der Lehrer Avatar von DoS
    Registriert seit
    18.08.2008
    Beiträge
    528

    Standard

    Danke, erstmal für die schnelle Antwort.

    Das mit "*meinStringPtr = "Hello, World!";" ist mir klar. Das kann ja nicht gehen, da es so wäre als würde ich den Vector, als Element nutzen.

    Der Sinn dafür war eigentlich, dass ich z.B. statt

    Vector[1]=...
    pVector[1]=... schreiben kann.
    Wobei das ja völliger Quatsch ist .

    Ich hatte angenommen, dass der "&-Pfad" intern die direkten Elemente hat, wobei die ja auf verschiedene "&-Pfade" verteilt sind. (Ich hatte das zuerst angenommen, weil hinter dem Vector oder auch Array ein [platz] steht und eben jener "platz" auf den Wert in dem "&-Pfad" zeigt, was ja falsch ist, anscheinend)

    Demnächst nehme ich dann also nur noch entweder Vektor[zahl] oder den Iterator.

    EDIT: Was ist eigentlich, wenn man die Elemente von einem Vector ,bzw. den Vektor in einer Funktion benutzen will? Wie übergibt man die?

    EDIT2: Habe mal ein bisschen ausprobiert. Man muss den kompletten Text schreiben, den man auch zur Deklaration nutzt: "vector<int> Daten" ,als Parameter und den Aufruf: Funktion(Daten); .

    EDIT3: Hmmm. War das richtig, was ich in EDIT2 gesagt habe???

    Wie kann man einen Vector mittels fstream "speichern"?


    MfG. -DoS
    Geändert von DoS (22.08.2009 um 19:50 Uhr)
    Legende: "Gruß" = kaum Zeit, "MfG." = durchschnittlich viel Zeit und "Mit freundlichen Grüßen" = viel Zeit
    gehabt beim Posten.


    Folgende Personen genießen meine Hochschätzung: BlackBerry, EBFE, DizzY_D, OpCodez, l0dsb und H4x0r007.

  4. #4
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Ok, hier ist ein kleines Test-Programm mit verschiedenen Überladungen der Funktion "meineFunktion", welche folgende Parameter-Variationen unterstützt:
    vector<string> meinParameter
    vector<string> *meinParameterPtr
    string meinParameter
    string *meinParameterPtr


    Sourcecode:
    Code:
    #include <iostream>
    #include <string>
    #include <vector>
    
    
    using namespace std;
    
    void meineFunktion(vector<string> meinParameter)
    {
        int i;
        
        for(i = 0; i < meinParameter.size(); i++)
        {
            cout << "meinParameter[" << i << "] = " << meinParameter[i] << endl;
        }
    }
    
    void meineFunktion(vector<string> *meinParameterPtr)
    {
        int i;
        
        for(i = 0; i < meinParameterPtr->size(); i++)
        {
            cout << "aendere \"" << (*meinParameterPtr)[i] << "\" in \"Bye, Bye, Bye!\"" << endl;
            (*meinParameterPtr)[i] = "Bye, Bye, Bye!";
        }
    }
    
    void meineFunktion(string meinParameter)
    {
        cout << "Es wurde \"" << meinParameter << "\" uebergeben!" << endl;
    }
    
    void meineFunktion(string *meinParameterPtr)
    {
        cout << "aendere \"" << *meinParameterPtr << "\" in \"Bye, Bye!\"" << endl;
        *meinParameterPtr = "Bye, Bye!";
    }
    
    int main(void)
    {
        vector<string> meinVector;
        int i;
        
        for(i = 0; i < 5; i++)
        {
            meinVector.push_back(*(new string));
            meinVector[i] = "Hello, World!";
        }
        
        meineFunktion(meinVector);
        meineFunktion(meinVector[0]);
        meineFunktion(&meinVector[1]);
        meineFunktion(meinVector);
        meineFunktion(&meinVector);
        meineFunktion(meinVector);
        
        cin.get();
        return 0;
    }
    Ausgabe:
    Code:
    meinParameter[0] = Hello, World!
    meinParameter[1] = Hello, World!
    meinParameter[2] = Hello, World!
    meinParameter[3] = Hello, World!
    meinParameter[4] = Hello, World!
    Es wurde "Hello, World!" uebergeben!
    aendere "Hello, World!" in "Bye, Bye!"
    meinParameter[0] = Hello, World!
    meinParameter[1] = Bye, Bye!
    meinParameter[2] = Hello, World!
    meinParameter[3] = Hello, World!
    meinParameter[4] = Hello, World!
    aendere "Hello, World!" in "Bye, Bye, Bye!"
    aendere "Bye, Bye!" in "Bye, Bye, Bye!"
    aendere "Hello, World!" in "Bye, Bye, Bye!"
    aendere "Hello, World!" in "Bye, Bye, Bye!"
    aendere "Hello, World!" in "Bye, Bye, Bye!"
    meinParameter[0] = Bye, Bye, Bye!
    meinParameter[1] = Bye, Bye, Bye!
    meinParameter[2] = Bye, Bye, Bye!
    meinParameter[3] = Bye, Bye, Bye!
    meinParameter[4] = Bye, Bye, Bye!

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  5. #5
    Das Leben ist der Lehrer Avatar von DoS
    Registriert seit
    18.08.2008
    Beiträge
    528

    Standard

    So, hatte jetzt mal die Zeit mir das anzugucken.

    Danke für die Antwort.

    MfG. -DoS
    Legende: "Gruß" = kaum Zeit, "MfG." = durchschnittlich viel Zeit und "Mit freundlichen Grüßen" = viel Zeit
    gehabt beim Posten.


    Folgende Personen genießen meine Hochschätzung: BlackBerry, EBFE, DizzY_D, OpCodez, l0dsb und H4x0r007.

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •