warum:error C2440: '=': 'const int *' kann nicht in 'int *' konvertiert werden?



  • Hallo,

    Warum scheitert mein Quellcode durch diesen Fehler an den 3 letzten Zeilen???

    class SensorData
    {
    	private:
    		static int marker;
    		char name [64];
    		int valuepos [16];
    		char* valuecor [16];
    		int posquant;	
    
    	public:
    		static int getmarker (void) {return marker;}; 
    		SensorData();
    		~SensorData();
    		void setthem(const char* pname, int* pvaluepos,char** pvaluecor, int pposquant );
    		const char* getname (void) const {return name ;};
    		const int* getpositions (void) const {return valuepos ;};
    		char* const* getcor (void) {return valuecor ;};
    		const int getposquant (void) const {return posquant ;};
    };
    
    //-----------------------------------------------------------------------
            int* tmp1 = new int[(*datalist[m]).getposquant() ];
    		char** tmp2 = new char*[(*datalist[m]).getposquant() ];
    		char tmp3[16] = {};
    
    		tmp1 = (*datalist[m]).getpositions() ;
    		tmp2 = (*datalist[m]).getcor() ;
    		tmp3 = (*datalist[m]).getname() ;
    


  • Wie wärs wenn du uns datalist zeigst?...



  • kann ich machen:
    et voila:

    const int PSIZE = 64;
    class Datacontainer
    {
    	private:
    		SensorData* datalist [PSIZE] ;
    
    	public:	
    		Datacontainer();
    		void addSensorDatabycommandline(int& quantity, char** argv) ;
    		void addSensorDatabymenu(int& quantity) ;
    		void remove() ;
    		void existancecheck(int i) ;
    		void list() ;
    		void ostream() ;
    		void istream() ;
    		void filtercsv() ;		
    };
    


  • Du musst in Datacontainer den [] (Index) Operator überladen.
    http://www.willemer.de/informatik/cpp/cppovrld.htm
    Fast am Ende.
    Da ich die Klasse jetzt nicht ganz kenne, wirst du vielleicht mit einem Iterator durchwandern müssen.
    Edit:
    Darf ich nochmal die Frage stellen, genau wie in deinem letzten Thread, warum du dir die Sache nicht mit std::string erleichterst?



  • ----------------------------------------------------------------------------------



  • kannste mir vlt den denkfehler klarmachen?



  • Die Fehlermeldung ist doch eindeutig.
    Du hast eine Variable "int *tmp1" und willst dieser einen "const int*" zuweisen. Damit würdest du ja dann die const-correctness aushebeln.
    Also entweder einen const_cast verwenden oder aber besser gleich "const int *tmp1" deklarieren.

    Aber warum reservierst du vorher Speicher mit 'new', wenn du den Zeiger gleich wieder mit einem anderen Wert überschreibst (Speicher-Leck!)???

    Oder willst du eine Kopie der Daten in diesem Speicherbereich anlegen?
    Dann müßtest du die Daten in einer Schleife kopieren...

    Als Vereinfachung der Speicherverwaltung solltest du dann besser gleich std::vector<> verwenden, denn diese Klasse nimmt dir beides ab!

    Außerdem hast du einige unnötige Syntax drin:
    - (void) bei Funktionen statt ()
    - unnötige ; nach den Funktionsklammern { ... }
    - (*datalist[m]). statt datalist[m]->


  • Mod

    Zilla schrieb:

    kannste mir vlt den denkfehler klarmachen?

    Du hältst an altbewährten Methoden fest, weil du in diese schon Energie investiert hast. Und das obwohl abzusehen ist, dass dich die alten Methoden auch in Zukunft noch unnötigen Aufwand kosten würden, im Vergleich zu neu gelernten Methoden. Dies ist ein verbreiteter Denkfehler, bei dem man versucht, seine alten Fehlinvestitionen vor sich selbst zu rechtfertigen. So wie viele Leute an alten Autos festhalten in die sie schon viele Reperaturkosten investiert haben, obwohl in Zukunft noch mehr Kosten zu erwarten sind. Oder wie schlechte Spieler beim Pokern immer drinbleiben wenn sie schon viel in den Pott investiert haben, obwohl sie wissen, dass sie die Runde wahrscheinlich verlieren.

    Hier liegt sogar ein besonders ungewöhnlicher Fall vor, da das Wissen um Array-Frickelei ja nicht verloren ginge, wenn du dich fortbildest. Du würdest es zwar in Zukunft weniger oft praktisch anwenden, aber es trotzdem nützlich, wenn man mal gesehen hat, was im Hintergrund der abstrakten Containerklassen passiert. Hier hält dich wohl zu großem Teil dein eigener Stolz davon ab, dich fortzubilden, weil das Gelernte deine alten Handlungen als unnötig Umständlich entlarven lassen würde.

    Wolltest du als Antwort auf deine Frage eigentlich so eine Psychoanalyse haben oder habe ich dich falsch verstanden? 😋


Anmelden zum Antworten