std::string als Index für eigene Klasse



  • Guten abend allerseits!

    Ich probiere mich gerade an einer Implementierung des Quine-McCluskey Algortihmus'. Zu diesem Zweck möchte ich eine neue Klasse definieren, die mit Hilfe eines überladenen Indexoperators die Wahrheitstabelle für einen Ein- oder Ausgang (automatisch auswählen) ausgibt.

    Meine Code sieht momentan wie folgt aus:

    Header:

    using namespace std;
    
    typedef vector < string > stringlist;
    typedef vector < stringlist > t_table;
    
    class QMClist {
    private:
    	stringlist _indices_in;
    	stringlist _indices_out;
    	t_table _invals;
    	t_table _outvals;
    public:
    	stringlist& operator[](string x);
    	QMClist(stringlist indices_in, stringlist indices_out);
    	void fill(string filename);
    };
    

    Source:

    stringlist& QMClist::operator[](string x) {
    	for (int _i = 0; _i < (int)_indices_in.size(); _i++) {
    		if (_indices_in[_i] == x) return _invals[_i];
    	}
    	for (int _i = 0; _i < (int)_indices_out.size(); _i++) {
    		if (_indices_out[_i] == x) return _outvals[_i];
    	}
    	throw std::out_of_range ("No Value found.");
    }
    
    QMClist::QMClist(stringlist indices_in,stringlist indices_out) {
    	_indices_in = indices_in;
    	_indices_out = indices_out;
    }
    
    void QMClist::fill(string filename) {
    	string _at = "a";
    	this[_at]->push_back("test");
    }
    

    Beim kompilieren des Codes gibt mir der Compiler folgende Errors aus:

    1>class_qmclist.cpp(18): error C2677: Binärer Operator '[': Es konnte kein globaler Operator gefunden werden, der den Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)
    1>class_qmclist.cpp(18): error C2227: Links von "->push_back" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden.
    

    "this[_at]->push_back("test");" ist also offenbar falsch. Kann mir jemand helfen und mir sagen wie es richtig sein müsste?

    Danke im Voraus!

    MFG TLuc



  • (*this)[_at] oder operator [] (_at)



  • Vielen Dank!!!

    Das Brett das vor meinem Kopf war darfst du behalten wenn du willst 😉



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum C++ (auch C++0x und C++11) verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten