Komischer Error



  • NOPx90 schrieb:

    Weis auch nicht genau.

    Dann würde ich mir std::string mal genauer anschauen. Auch wenn du dich entschliesst, die Klasse nicht zu benutzen, gibt es wahrscheinlich doch einige interessante Punkte.

    NOPx90 schrieb:

    Vielleicht, weil ich dann keine Ahnung mehr habe was der Computer macht?

    Naja, viel mehr erfährst du bei char* nicht. Und das, was du siehst, hast du schnell einmal gesehen 😉

    Soll heissen, char -Arrays sind sicher gut, um etwas über die Hintergründe zu erfahren. Nach einiger Zeit kennst du diese aber und weisst somit auch, wie std::string funktioniert. Und sobald es um den produktiven Einsatz geht, lohnt es sich nicht mehr, alles von Hand zu machen, was einem die Standardbibliothek bereits abnimmt. Das bringt nur unnötigen Aufwand und Fehler mit sich.

    NOPx90 schrieb:

    Was bedeutet eigentlich der Error?:[code]expected constructor, destructor, or type conversion before '=' token

    Irgendein Syntaxfehler. Zeig mal den Kontext, in dem er auftritt.



  • Äääähm um den geht doch der Thread. Schau mal auf der ersten Seite den letzten Post an.
    Und std::string kann ich mir mal anschaun, aber in diesem Projekt werde ich noch bei den C-Strings bleiben(vorerst).



  • NOPx90 schrieb:

    Äääähm um den geht doch der Thread. Schau mal auf der ersten Seite den letzten Post an.

    Äh ja, ich sprach aber vom Kontext, den du uns leider nicht vollständig gezeigt hast. Stehen die Anweisungen in einer Funktion? Gibt es Header-Guards oder sonstige Makros? Steht vor dem Code etwas Anderes, das du uns unterschlagen hast? Was wird wovon inkludiert?

    Also poste ein komplettes Codebeispiel, das nur noch deinen Fehler enthält. Halte den Code aber trotzdem so klein wie möglich.



  • Nexus schrieb:

    NOPx90 schrieb:

    Äääähm um den geht doch der Thread. Schau mal auf der ersten Seite den letzten Post an.

    Äh ja, ich sprach aber vom Kontext, den du uns leider nicht vollständig gezeigt hast. Stehen die Anweisungen in einer Funktion? Gibt es Header-Guards oder sonstige Makros? Steht vor dem Code etwas Anderes, das du uns unterschlagen hast? Was wird wovon inkludiert?

    Anweisungen stehen nicht in einer Funktion.
    Header-Guards gibt es(steht aber schon weiter oben)
    Es steht nichts anderes in der Trash_h.h. Nur das:
    [spoiler]

    //Trash_h.h
    #ifndef TRASH_H
    #define TRASH_H
    #include "datenbank_h.h"
    //Funktion zum testen ob eine Datei existiert
    bool fexists(const char *filename);
    
    //Globals
    bool saved;
    char str_date[30];
    int aktual_day, aktual_month;
    char aktual_year[5];
    char termine_output[MAX_CHARS];
    char db_filename[30];
    datenbank db;
    //Globals ende
    
    #endif
    
    //trash_h.cpp
    #include "trash_h.h"
    #include "datenbank_h.h"
    #include <fstream>
    using namespace std;
    
    bool fexists(const char *filename)
    {
      ifstream ifile(filename);
      return ifile;
    }
    
    saved = true;
    aktual_day = 1;
    aktual_month = 1;
    strcpy(aktual_year, "");
    strcpy(termine_output, "");
    strcpy(db_filename, "");
    

    [/spoiler]

    Was wird wovon inkludiert?

    main.cpp:

    #include <windows.h>
    #include <stdio.h>
    #include <time.h>
    #include "datenbank_h.h"
    #include "trash_h.h"
    

    datenbank_h.cpp:

    #include <iostream>
    #include <fstream>
    #include <Windows.h>
    #include "datenbank_h.h"
    #include "trash_h.h"
    using namespace std;
    

    datenbank_h.cpp:

    //none
    

    trash_h.cpp:

    #include "trash_h.h"
    #include "datenbank_h.h"
    #include <fstream>
    using namespace std;
    

    trash_h.h:

    #include "datenbank_h.h"
    

    Nexus schrieb:

    Also poste ein komplettes Codebeispiel, das nur noch deinen Fehler enthält. Halte den Code aber trotzdem so klein wie möglich.

    Was meinst du mit komplett? Weil ich will meinen kompletten Source-Code lieber nicht posten (davon abgesehen sind es ca 800-900 Zeilen) Oder meinst du nur die globalen Definitionen oder ähnliches?



  • Willst Du C oder C++ programmieren? Entscheide dich bitte.
    Wozu die ganzen globalen? Da ist ein Singleton Pattern noch vernünftiger. Das ist auch eine globale, aber man kann wenigstens vernünftige Zugriffe einbauen.

    Also erstmal ne Korrektur:

    // Trash_h.h:
    
    //Globals
    extern bool saved;
    extern char str_date[30];
    extern int aktual_day, aktual_month;
    extern char aktual_year[5];
    extern char termine_output[MAX_CHARS];
    extern char db_filename[30];
    extern datenbank db;
    //Globals ende
    
    //Trash_h.cpp:
    bool saved = true;
    int aktual_day = 1;
    int aktual_month = 1;
    char aktual_year[5];
    char termine_output[MAX_CHARS];
    char db_filename[30];
    datenbank db;
    

    So wäre das erstmal die richtige Definition. strcpy einfach im globalen Bereich stehen haben geht nicht. Pack das in eine init-funktion oder, weil wir im C++ Forum sind, am besten in den Konstruktor. Aber in C++ braucht man strcpy nur bedingt.
    Das hier wäre C++:

    class Trash
    {
    public:
      Trash()
      : saved(true), day(1), month(1), year(1900)
      {}
    
      bool saved = true;
      int day;
      int month;
      int year;
      std::string termine_output;
      std::string db_filename;
      datenbank db;
    
    };
    
    // Reimplementierung als singelton:
    class Trash
    {
    private:
      Trash()
      : saved(true), day(1), month(1), year(1900)
      {}
    
      Trash(const Trash&) {}
      Trash& operator=(const Trash& rhs) { return *this; }
    
    public:
      static Trash& getInstance()
      {
          static Trash OnlyOne;
          return OnlyOne;
      }
    
      bool saved = true;
      int day;
      int month;
      int year;
      std::string termine_output;
      std::string db_filename;
      datenbank db;
    
    };
    

    Jetzt kannst du über Trash::getSingleton().saved als bsp, auf alle Member zugreifen und die Werte bleiben, da die Funktion statisch ist.
    Wie du das genau organisierst musst du selber beschliessen, ich kenne hier nur Fragmente deines Codes.



  • Willst Du C oder C++ programmieren? Entscheide dich bitte.

    Sorry, aber das weis ich auch nicht so genau. Jede der beiden Sprachen hat Vorteile. Und es ist ja so ungefähr das gleiche. Ich weis schon dass man das nicht mischen darf... ich schäm mich ja schon.

    strcpy einfach im globalen Bereich stehen haben geht nicht.

    Omg bin ich dumm, dass ich das vergesse 😞 *schäm*

    Aber danke an alle! Ich habs jetzt geschafft. es lag an dem extern (sry, mit dem hab ich noch nie gearbeitet).



  • NOPx90 schrieb:

    Anweisungen stehen nicht in einer Funktion.

    In C und C++ müssen sie das aber. Was ausserhalb stehen kann, sind Deklarationen.

    Hier liegt auch dein Fehler.



  • NOPx90 schrieb:

    Jede der beiden Sprachen hat Vorteile.

    Und welche Vorteile hat C? Mir fällt im Moment keiner ein.



  • 314159265358979 schrieb:

    Und welche Vorteile hat C? Mir fällt im Moment keiner ein.

    Das kommt auf das Anwendungsgebiet an. Frag mal die Embedded-Entwickler, die sehr Hardware-nahen, höchstperformanten Code produzieren müssen. Da wird viel in C geschrieben (mal ungeachtet der Tatsache, obs von einem C- oder C++-Compiler übersetzt wird)



  • pumuckl schrieb:

    314159265358979 schrieb:

    Und welche Vorteile hat C? Mir fällt im Moment keiner ein.

    Das kommt auf das Anwendungsgebiet an. Frag mal die Embedded-Entwickler, die sehr Hardware-nahen, höchstperformanten Code produzieren müssen. Da wird viel in C geschrieben (mal ungeachtet der Tatsache, obs von einem C- oder C++-Compiler übersetzt wird)

    Auf nem handelsüblichen PC hat C keine Daseinsberechtigung mehr, abgesehen vom Betriebssystem und dessen Komponenten. Ich bezweifle auch, dass C schneller ist, als C++, insbesondere mit C++0x wird C++ ziemlich sicher schneller sein als C.



  • 314159265358979 schrieb:

    NOPx90 schrieb:

    Jede der beiden Sprachen hat Vorteile.

    Und welche Vorteile hat C? Mir fällt im Moment keiner ein.

    Man kann über die Geschwindigkeit C vs C++ den x-ten Flamewar führen 🙄


Anmelden zum Antworten