Obkekt kann nicht von Klasse erstellt werden!



  • Sorgenkind schrieb:

    ...

    ..
                         struct str_p_GetPC
    					 {                  
                                int num_array;
                                bool* array;
                         }s_p_GetPC;
    ...
    

    😮 😮 😮
    Also "C-iger" (im Gegensatz zu "C++-ig") geht's kaum noch....
    Ich schlage Dir ebenfalls vor: Nutze C++ - macht Deinen Code kürzer, sicherer, übersichtlicher ...

    2 konkrete Dinge:
    - "Typkennzeichner" haben sich schon lange als überflüssige Krücke erwiesen - erst Recht bei Typen.
    - Was ist bei Dir "string" ?

    Gruß,

    Simon2 (der den Rest des Codes lieber nicht sehen - geschweige denn "kopieren" möchte :p 😉 ).



  • Wow, der code is wahnsinn. Was willst dafür haben?



  • Hallo,

    p_Message ist ein ziemlich uninitialisierter Zeiger 😉

    MfG,

    Probe-Nutzer



  • [quote="Sorgenkind"]

    Konstruktor-Dekonstruktor sehen gut aus

    Ich kann nach Ansicht des Quellcodes die Wahl Deines Benutzernamens voll und ganz verstehen. 🤡



  • ich denke auch, daß das uninitialisierte p_message ein problem sein könnte.

    p_message im konstruktor auf 0 initialisieren und am anfang des destruktors ein assert(p_message) setzten. damit wärst du nach einem testlauf zumindest ein wenig schlauer.

    du schreibst, daß der fehler bei beendigung des programms auftritt. das läßt darauf schließen, daß der fehler beim aufruf des destruktors einer globalen variablen auftritt.

    debugger erlauben normalerweise die ausgabe eines backtrace-stacks. damit kannst du nicht nur erkennen, wo der fehler aufgetreten ist, sondern auch von wo aus die fehlerstelle aufgerufen worden ist.



  • Hat mich im Nachhinein auch gestört, war Mist, hab mich deshalb entschieden nochmal eben bischen was neu zu proggen:

    class Message
    {
          private:
                  int pc_number;
                  public:
    					 ~Message();
    
                         void p_Send(char* message,int p_pc);
                         int GetPC(int p_pc_number);
                         int p_GetPC();
                         int re_PCNumber();
                         int check_bool_pcNum();
    
                         string Find_newPCNumber();
    
    };
    
    class get_newPC
    {
    	  private:
                  string old_numb;
                  string akt_numb;
          public:
    		       get_newPC();
    		      ~get_newPC();
    };
    
    class s_p_GetPC
    {    
         private:             
    			int num_array;
    		    bool* array;
    
         public:
    		 s_p_GetPC();
    		 ~s_p_GetPC();
    };
    
    s_p_GetPC::s_p_GetPC()
    {
    	array=new bool[num_array];
    	num_array=8;
    }
    
    s_p_GetPC::~s_p_GetPC()
    {
    	array=0;
    	num_array=0;
    }
    
    get_newPC::get_newPC()
    {
     	old_numb="0";
    	akt_numb="0";
    }
    
    get_newPC::~get_newPC()
    {
    }
    
    Message::~Message()
    {
    	pc_number=0;
    };
    


  • Und was soll uns das sagen?



  • Das ich es auch besser machen kann. Jetzt hab ich aber ein neues Problem und zwar wird ein Zeiger oder ein Objekt erwartet über den ich zwei Instanzen übergeben kann. Um genau zu sein zwei strings:

    string Message::Find_newPCNumber()
    {
     get_newPC new_PC;
     system("net view > old_numb");
     new_PC.akt_numb = new_PC.old_numb;
     return new_PC.akt_numb;
    }
    

    Hier sagt er mir:

    'get_newPC::akt_numb' : cannot access private member declared in class 'get_newPC'
    

    Komischerweise kann er die Private Membervariable nicht aufrufen. Liegt das möglicherweise daran, dass ich eine Klasse in der Methode einer anderen Klasse aufrufen möchte?



  • Sorgenkind schrieb:

    zu proggen

    "Proggen" tun nur "kiddies" - deshlab "funzt" dann auch nichts..
    Ne, mal im ernst: der Code sieht immernoch schrecklich aus. Hast du nicht noch mehr Einzelbuchstaben und Unterstriche, damit die Variablennamen noch unleserlicher werden?
    p_i_v_pc_d_g_das_ist_aussagekraeftig_ha_ha
    denk beim Programmieren immer dran, dass du das geschriebene nicht nur jetzt verstehen können musst, sondern auch in ein paar Wochen und Monaten noch. unter Umständen müssen auch andere erkennen was du da versuchst zu machen (z.B. wir, die du uns um Tips bittest). Und da bringen solche Namen nur Verwirrung...



  • Hi,

    Das ich es auch besser machen kann....

    Guter Ansatz.
    Fang doch mal mit Folgendem an:
    0.) "Typkennzeichen" weg.

    class s_p_GetPC...
    

    Schubber!
    =>

    class GetPC...
    

    1.) Zeiger nur da, wo man sie braucht.
    =>

    class Message
    {
    ...
       void send(string const&);
    ...                
    };
    

    2.) Klassen, die nichts tun/sind, braucht man nicht:

    class get_newPC
    {
    	  private:
                  string old_numb;
                  string akt_numb;
          public:
    		       get_newPC();
    		      ~get_newPC();
    };
    

    => Streichen!

    3.) In 99% der Fälle (und ja: Deiner ist einer davon) braucht man Keinen Container selbst zu schreiben:

    class GetPC
    {    
    ...};
    

    => ersetzen durch:

    typedef vector<bool> GetPC;
    

    (oder den Typen "GetPC" gleich direkt streichen)

    Gruß,

    Simon2.



  • Hey,
    danke Simon. Bin gerade nur noch am überlegen, ob ich den Code komplett neu schreibe oder ob ich so weiter mache...



  • Neu schreiben!!!!!! ⚠



  • neu schrieb:

    Neu schreiben!!!!!! ⚠

    Aber bitte in folgender Reihenfolge:
    a) Thread lesen, und verstehen warum.
    b) Ggf. (empfehle ich) ein gutes C++ Buch lesen (Thinking in C++, C++ Primer...)
    c) Ggf. Rückfragen im Forum (kann auch während d erfolgen)
    d) Neuschreiben



  • sacht ma?

    ist das der tonfall in dem in foren wie diesen immer auf fragen geantwortet wird?

    ich versteh ja das eine community kein frage/antwort automat ist, aber wenn man

    return (_BUF_SIZE <= _Myres ? _Bx._Ptr : _Bx._Buf);

    googelt dann kommt man zu diesem thread und ich würde doch höfflichst darum bitten die Zeit von nichtProgramierern die stundenlang bugs aus dem weg räumen ,die den herren mit 500+ nachrichten auf diesem bord sicher keine mühe bereiten würden, nicht auch noch damit zu verschwenden sinnlose antworten auf dem level von "mach erstmal deine hausaufgaben" zu durchforsten..........auf der such nach nem klitzekleinen hinweis warum ich bei xstring lande während ich doch einfach nur ein paar arrays hin und her intialisiere.....*gebt euch nicht die mühe euch drüber lustig zu machen....is mein problem*

    also:

    bitte bitte bitte nicht weiter die informationsphäre mit fürzen verpesten......

    danke...
    ƒ(ω→∞)≡↓Ω+↑Ω


Anmelden zum Antworten