Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit std::find() und Iteratoren

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
13.11.2015, 18:17 Uhr
~DarkDan
Gast


Hallo zusammen!

Ich habe folgende Klassenmemberfunktion, von der ich mir recht sicher bin, dass das Problem von ihr ausgeht.
Es soll eine Textdatei eingelesen werden und jede Zeile als Bilanz-Objekt einem Company-Objekt zugeordnet werden und dieses dann wiederum in einem vector gespeichert werden (jede Firma soll nur einmal existieren).
Eigentlich wollte ich lediglich einen Index von std::find() zurückbekommen, aber das war für mich mehr Arbeit als ich dachte... :/
Ich denke, der Fehler liegt hier, aber ich weiß nicht genau wieso. Ich habe diese Zeile analog zum Beispiel bei std::find() erstellt, nur dass es sich hier um ein Company-Objekt handelt und nicht um ein Integer:


C++:
iter = std::find(m_companies.begin(), m_companies.end(), compCheck);



Hier die vollständige Funktion:


C++:
void FileAdmin::loadCompanies(const string& path){
    
    std::ifstream ifs(path);
    string token;
    vector<string> lines;    //every line in file
    string line;
    //file's lines are read into a vector
    if (ifs.good()){
        while (!ifs.eof()){
            getline(ifs, line);
            lines.push_back(line);
        }
    }
    
    //every line will be another balance in a specific company
    for (unsigned int i = 0; i < lines.size(); i++){
        vector<string> tokens;
        std::istringstream iss(lines[i]);
        //every line is split into its elements [name, date....] and temporarily put into tokens
        while (getline(iss, token, ';')){
            tokens.push_back(token);
        }
        
        Company compCheck(tokens[0]);    //company object to compare if it's already in the companies vector
        
        //check if there is no object like compCheck yet
        std::vector<Company>::iterator iter;
        
        iter = std::find(m_companies.begin(), m_companies.end(), compCheck);
        std::vector<Company>::iterator last = m_companies.end();
        
        if (iter != m_companies.end()){
            int index = std::distance(iter, last);
            //if company does exist, only add balance
            Date date(tokens[1]);
            Balance bal(date, stoi(tokens[2]), stoi(tokens[3]), stoi(tokens[4]), stoi(tokens[5]));
            m_companies[index].addBalance(bal);
        }
        else {
            //if company does not exist, create it and add line as balance
            Date date(tokens[1]);
            Balance bal(date, stoi(tokens[2]), stoi(tokens[3]), stoi(tokens[4]), stoi(tokens[5]));
            compCheck.addBalance(bal);
            m_companies.push_back(compCheck);
        }
        tokens.clear();
    }
}



Das ganze generiert allerlei Fehlermeldungen, darunter u.A.:
-> C2678: binary '==' : no operator found which takes a left-hand operand of type 'Company' (or there is noc acceptable conversion)
-> system_error(410)
...

Googeln hat mich da nicht weitergebracht, da ich keine Verbindung zu meinem Problem sehe, da ich keinen Operator verwende
Ich hoffe, hier kann mir jemand helfen!

Liebe Grüße,
Dan
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.11.2015, 11:14 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

deine Klasse Company hat vermutlich keinen == operator?
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2015, 13:53 Uhr
~DarkDan
Gast


Ja, aber wo genau bräuchte ich diesen denn?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.11.2015, 17:21 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja du suchst ja aktuell die Stelle, in der compCheck ist, d.h er vergleicht ja alle mit compCheck (eben mit operator== )
--
class God : public ChuckNorris { };

Dieser Post wurde am 15.11.2015 um 17:26 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.11.2015, 12:25 Uhr
~DarkDan
Gast


Ohhhh, stimmt! Wieder mal blind geworden...danke dir vielmals!
 
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: