1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Mitglieder
  3. Leocor

Beiträge von Leocor

  • catch(...) fängt meine Exception nicht!

    • Leocor
    • 17. November 2012 um 10:06

    Oh Danke! Oh verdammt es war doch was ganz leichtes!
    Ich komm immer durcheinander wenn ich Java und c++ parallel programmiere (bei zwei unterschiedlichen Projekten)!

    Wenn der Compiler wenigstens ein Warning wirft wäre das schon fein!!

    danke!! nochmals

  • catch(...) fängt meine Exception nicht!

    • Leocor
    • 16. November 2012 um 22:02

    Hi!

    Ich habe ein ganz eigenartiges Phänomen! Ich habe eine klasse (ttsserver) implementiert und darin existiert eine public function: connect()!

    Code
    void ttsserver::connect() throw(){
    
    
      nscRESULT result;
    
    
    
    
      if(process_status.setLocal == 0){
        errlog::warningLog("Network or Local Server not specified", __FILE__, __LINE__);
        this->ip_address = "127.0.0.1";
      }
    
      if(process_status.setIPAddress == 0){
        errlog::warningLog("IP Address has not been set. Using default IPAdress: 127.0.0.1", __FILE__, __LINE__);
        this->ip_address = "127.0.0.1";
      }
    
    
    
    
      if(process_status.setCMDPort == 0){
        errlog::warningLog("CMD port has not been set. Using default CMD port: 6666", __FILE__, __LINE__);
        this->cmd_port = 6666;
      }
    
    
    
    
      if(process_status.setDATAPort == 0){
        errlog::warningLog("DATA port has not been set. Using default DATA port: 6665", __FILE__, __LINE__);
        this->data_port = 6665;
      }
    
      if(!this->islocal){
        result = nCSCE(NSC_AF_INET,this->cmd_port,this->data_port,this->ip_address.c_str(),&hSrv);
      }else{
        result =nCSCE(NSC_AF_LOCAL,this->cmd_port,this->data_port,this->ip_address.c_str(),&hSrv);
      }
    
    
    
    
      switch(result){
        case NSC_OK:
          break;
        case NSC_NOT_ENOUGH_MEMORY:
          throw ttsserver::NotEnoughMemoryException("Cannot create server context", __FILE__, __LINE__);
          return;
        case NSC_SRV_NOTRUNNING:
          throw ttsserver::NoServerException("Cannot create server context", __FILE__, __LINE__);
          return;
      }
    
      process_status.createdServerContext = 1;
    }
    Alles anzeigen

    nCSCE(..) ist eine Funktion aus einer c-Library und gibt nen int wert zurück! Wo anderst rufe ich

    Code
    server.setCmdPort(ui.CmdPort_LineEdit->value());
      server.setDataPort(ui.DataPort_LineEdit->value());
      server.setIPAdresse(ui.IP_LineEdit->text().toUtf8().constData());
      try{
        server.connect();
        ui.statusbar->showMessage(tr("Verbindung erfolgreich aufgebaut"));
      }catch(ttsserver::NoServerException &e){
        ui.statusbar->showMessage(tr("Verbindungsaufbau nicht möglich 1"));
      }catch(exception &e){
        ui.statusbar->showMessage(tr("Verbindungsaufbau nicht möglich 2"));
      }catch(...){
        ui.statusbar->showMessage(tr("Verbindungsaufbau nicht möglich 3"));
      }
    Alles anzeigen

    auf und bekomme "terminate called after throwing an instance of 'ttsserver::NoServerException'"!!
    wenn ich innerhalb der Try { .. } ein throw ttsserver::NoServerException(""); aufrufe wirds richtig gefangen nur das andere nicht!
    Ich programmier jetzt schon ziemlich ziemlich lang (heute) ... und ich find den Fehler nicht! wh. ists eh ganz einfach! aber im Moment hab ich keine Ahnung!

    Thx für die Hilfe (im voraus)

    lg Leocor

  • Position der adressen von virtuellen funktionen

    • Leocor
    • 14. Oktober 2008 um 22:18

    danke damit hast mir sehr weitergeholfen

  • Position der adressen von virtuellen funktionen

    • Leocor
    • 14. Oktober 2008 um 19:54

    Ich hab eine ganz allgemeine Frage:

    Ich habe eine klasse A:

    Code
    class A{
    public:  
      int a;
      char b;
      /*....*/
     
      /*konstruktoren*/
    
    
      virtual funktion() = 0;
      virtual funktion2() {
           //bla bla
      }
    
    
    }
    Alles anzeigen

    Ich leite dann eine zweite klasse ab:

    Code
    class B : public A{
    public:  
    //neue variablen
      int c;
      double d;
      /*....*/
     
      /*konstruktoren*/
    
    
      virtual funktion() { /*...*/};
      virtual funktion2() {
           //bla bla
      }
    
    
    }
    Alles anzeigen

    Ich habe dann ein objekt der Klasse B. Wie stehen dann die daten darin??

    |---int a---|
    |--char b--|
    |---v ptr---|
    |--v ptr2--|

    |---int c---|
    |-double d-|

    oder

    |---int a---|
    |--char b--|
    |---int c---|
    |-double d-|
    |---v ptr---|
    |--v ptr2--|

    Ich hoffe ihr wisst was ich mein (ach ja bitt vernachlässigt in meinem beispiel die unterschidlichen größen meiner Variablen)

  • Probleme beim Linken

    • Leocor
    • 27. Mai 2008 um 13:05

    ohhh mann ich hass manchmal den compiler :grinning_squinting_face:

    1000x Dank ... auf die idee wär ich nie gekommen :grinning_squinting_face:

  • Probleme beim Linken

    • Leocor
    • 27. Mai 2008 um 12:26

    Ich weis das ist wahrscheinlich der ur leichte fehler! aber ich finde ihn trotzdem nicht!!

    Also: ich hab ein Template FGraph und möchte diese Template-Class einmal verwenden:
    main.cpp:

    C
    #include <iostream>
    
    
    #include "FGraph.h"
    #include "Human.h"
    
    
    using namespace std;
    
    
    int main(int argc, char *argv[]){
    	Human mike("Mike","-");
    
    	FGraph<Human> sBaum;
    	sBaum.Root = mike;
    
    	cout << sBaum.toString();
    }
    Alles anzeigen

    FGraph.h:

    Code
    template<class T> class FGraph{
    ...
    	FGraph();
    	FGraph(T root);
    	virtual ~FGraph();
    ...
    }

    FGraph.cpp:

    Code
    template<class T> FGraph<T>::FGraph(){
    	Root = T();
    
    	addDirectDescendant( T() , T());	
    }
    
    
    template<class T> FGraph<T>::FGraph(T root){
    	Root = root;
    	addDirectDescendant( Root , T());
    }
    
    
    template<class T> FGraph<T>::~FGraph(){
    	for(int i = 0; i < m_descendant.size(); i++){
    		delete 	m_descendant.at(i);
    	}
    }
    Alles anzeigen

    Und mein Compiler spuckt nur aus:

    Code
    #> make
    g++ -ansi -pedantic-errors -g -Wall -c main.cpp
    g++ -ansi -pedantic-errors -g -Wall -c FGraph.cpp
    g++ -o myFGraph -g main.o FGraph.o Human.o
    main.o: In function `main':
    /home/strenkwalder/.eclipse/FGraph/main.cpp:12: undefined reference to `FGraph<Human>::FGraph()'
    /home/strenkwalder/.eclipse/FGraph/main.cpp:15: undefined reference to `FGraph<Human>::toString()'
    /home/strenkwalder/.eclipse/FGraph/main.cpp:15: undefined reference to `FGraph<Human>::~FGraph()'
    /home/strenkwalder/.eclipse/FGraph/main.cpp:15: undefined reference to `FGraph<Human>::~FGraph()'
    collect2: ld returned 1 exit status
    make: *** [FGraph] Fehler 1
    Alles anzeigen

    und jetzt meine frage: Wo ist das problem ich habs mit include richtig eingebunden und sonst mault der compiler auch nicht!!:confused:
    es hat sicher was mit dem template aufruf zu tun!!! weil wenn ich die zu einem nicht template class mach dann gehts ohne fehler

  • Symbolic name einer DL

    • Leocor
    • 8. Mai 2008 um 13:41

    Ja genau sowas hab ich gemeint!!

    nur mir gings die ganze zeit um die funktion math_init() :
    Wie soll ich das genau machen? ...
    Ich will ja alle symbolic names der funtionen die in meiner so enthalten sind!!
    --> ich will in die funktion nicht alle namen händisch eintragen müssen!!

    weist was ich mein?? --> wenn ich meine so editiere und ne mod(..) hinzu füge ... dann wär es fein wenn ich dann nicht noch die math_init umschreiben muss (das sie halt ein namen mehr ausgibt)

    fazit:
    ich hab N funktionen (mit unbekannten namen) die ich irgendwie dynamisch nach der reihe auflösen will?? geht das

  • Symbolic name einer DL

    • Leocor
    • 2. Mai 2008 um 20:42

    Kann man in einer Dynamic Library die einzelnen Symbolic Names auslesen der einzelnen Funktionen!

    Ich kann ja mit dlsym(..) und der Flag RTLD_NEXT alle Funktionen in einer DL durchgehen! Kann ich dabei ihren Namen auslesen? irgendwie?


    ich hoff es war einigermaßen verständlich was ich geschrieben hab!
    also sicherheitshalber:

    ich hab ne libmath.so (eigene lib) da sind N Funktionen enthalten!
    Ich möchte jetzt jede funktion (funktionspointer) und den dazugehörigen namen auslesen und in eine map stellen!

    kann mir da eine/r helfen?

  • Invalid read of size 1

    • Leocor
    • 19. April 2008 um 20:29

    Ich programmier c++ noh nicht so lang!

    ich denk du meinst die zeile:
    return (strs.str()).c_str();

    warum ist der string schon zerstört?

  • String auf bestimmte Syntax testen

    • Leocor
    • 19. April 2008 um 18:58

    kannst dich noch an eProg erinnern ....

    verwende so einen Operationsbaum:

    3+5*7 =>
    +
    / \
    3 *
    / \
    5 7

    und so weiter das ist das einfachste und wenn mal wo ein blatt felt -> fehler
    oder nach jeden operator keine zahl kommt ....

  • Invalid read of size 1

    • Leocor
    • 19. April 2008 um 18:50

    ICh habe 2-3 klassen (für exceptions) geschrieben und verwende den polymorphismus zur Fehlerausgabe! ... soweit so gut ....

    ich hab die files geschrieben und jetzt bringt mir valgrind andauernd "Invalid read of size 1" als error und ich komm nicht darauf warum!! (ich steh wahrscheinlich ur auf der leitung)

    könnt ihr mir helfen?

    Code
    ==10892== Memcheck, a memory error detector.
    ==10892== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
    ==10892== Using LibVEX rev 1732, a library for dynamic binary translation.
    ==10892== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
    ==10892== Using valgrind-3.2.3, a dynamic binary instrumentation framework.
    ==10892== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
    ==10892== For more details, rerun with: -v
    ==10892==
    ==10892== Invalid read of size 1
    ==10892==    at 0x40235C8: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==10892==    by 0x40D98EB: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_tr
    aits<char> >&, char const*) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x80492D0: main (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==  Address 0x42A43A4 is 12 bytes inside a block of size 52 free'd
    ==10892==    at 0x4022156: operator delete(void*) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==10892==    by 0x40E403C: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x40E5FB9: std::string::~string() (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x8049579: MathException::what() const (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==    by 0x80492C0: main (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==
    ==10892== Invalid read of size 1
    ==10892==    at 0x40235D3: strlen (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==10892==    by 0x40D98EB: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_tr
    aits<char> >&, char const*) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x80492D0: main (in /home/strenkwalder/workspace/mymath/a.out)==10892==  Address 0x42A43A5 is 13 bytes inside a block of size 52 free'd
    ==10892==    at 0x4022156: operator delete(void*) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==10892==    by 0x40E403C: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x40E5FB9: std::string::~string() (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x8049579: MathException::what() const (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==    by 0x80492C0: main (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==
    ==10892== Syscall param write(buf) points to unaddressable byte(s)
    ==10892==    at 0x40007F2: (within /lib/ld-2.6.1.so)
    ==10892==    by 0x41D0F14: (within /lib/libc-2.6.1.so)
    ==10892==    by 0x41D11C5: _IO_file_xsputn (in /lib/libc-2.6.1.so)
    ==10892==    by 0x41C715E: fwrite (in /lib/libc-2.6.1.so)
    ==10892==    by 0x40D6CB5: (within /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x40D96FE: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x40D98FB: std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x80492D0: main (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==  Address 0x42A43A4 is 12 bytes inside a block of size 52 free'd
    ==10892==    at 0x4022156: operator delete(void*) (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
    ==10892==    by 0x40E403C: std::string::_Rep::_M_destroy(std::allocator<char> const&) (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x40E5FB9: std::string::~string() (in /usr/lib/libstdc++.so.6.0.9)
    ==10892==    by 0x8049579: MathException::what() const (in /home/strenkwalder/workspace/mymath/a.out)
    ==10892==    by 0x80492C0: main (in /home/strenkwalder/workspace/mymath/a.out)
    Error: The result is out of Range: ***
    ==10892==
    ==10892== ERROR SUMMARY: 41 errors from 3 contexts (suppressed: 3 from 1)
    ==10892== malloc/free: in use at exit: 0 bytes in 0 blocks.
    ==10892== malloc/free: 5 allocs, 5 frees, 725 bytes allocated.
    ==10892== For counts of detected errors, rerun with: -v
    ==10892== All heap blocks were freed -- no leaks are possible.
    Alles anzeigen

    mian.cpp

    Code
    int main(int argc, char *argv[] ){
    	[COLOR='#ff0000']try{
    		throw OverflowException("MSG");
    	}catch(MathException &e){
    		cerr << e.what() << "\n";
                }[/COLOR]
    	return EXIT_SUCCESS;
    }


    Code
    #include "MathException.h"
    
    
    
    
    MathException::MathException(const char *sz) throw(){
    	m_msg = sz;
    }
    
    
    MathException::~MathException() throw(){
    }
    [COLOR='Red']
    const char* MathException::what()  const throw(){
    	stringstream strs;
    	strs << "Error: " << m_errortyp.c_str() << ": " << m_msg.c_str();
    	return (strs.str()).c_str();
    }[/COLOR]
    Alles anzeigen

    im markierten text muss ich irgend einen fehler gemacht haben
    kann mir einer sagen was?

  • compiler otionen für dos *.exe

    • Leocor
    • 30. März 2008 um 20:46

    Danke!!

  • compiler otionen für dos *.exe

    • Leocor
    • 30. März 2008 um 17:08

    Hi!

    Ich habe einen Embedded Sys. wo ein dos betriebsystem drauf ist!
    ich hab im moment nur ein Linux zur verfügung und wollte daher wissen:

    Kann man (am besten mit dem gcc oder g++)mit einem linux-compiler auch dosfähige programme schreiben ....im spezielen c/c++ compiler! Wenn ja mit welchen bzw welcher Option!??


    thx leocor

  • Funktions-Pointer im Template

    • Leocor
    • 29. März 2008 um 10:31

    Danke!
    das ist die schönste lösung

  • fstream - buffer

    • Leocor
    • 29. März 2008 um 10:28

    ich hab sowas gemeint:

    Code
    ofstream_... temp = cout;
    cout.rdbuf(file.rdbuf()); // dann verwendens den selben buffer
    cout << "bla bla";         // dann schreibt er das ins file

    jetzt hötte ich nur gen nen buffer aus den beide schreiben können!
    oder so

  • fstream - buffer

    • Leocor
    • 28. März 2008 um 20:37

    Ich habe eine frage:
    Ist es möglich den cout- bzw den fstream-buffer so umzulenken das man in beides gleichzeitig schreibt?

    also zur erklärung:
    ich würde gern wenn ich was in den cout ausgebe das gleichzeitig in ein file schreiben!

    weil ich kanns ja so umleken das ich mit dem cout befehl in ein file schreibe oder in die konsole

    hat wer ne lösung oder muss ich mir da selbst was basteln ??

  • namespace

    • Leocor
    • 24. März 2008 um 20:29

    danke so hats geklappt

  • namespace

    • Leocor
    • 24. März 2008 um 19:52

    Data.cpp

    Code
    #include "Data.h"
    
    
    namespace data{
    
    
    void usage(string s){
    
    
    	cerr << s <<"\n";
    	cerr << "Usage: " << cmd << " [-m M –n N | -i <infile> | -c <infile>] [-o <outfile>]\n";
    	printErr();
    }
    
    
    void printErr(string sz){
    	cerr << sz << "\n";
    	exit(EXIT_FAILURE);
    }
    
    
    void input(string s){
    	static int input = 0;
    
    	input++;
    
    	if(input > 1)
    		usage("Too many input-arguments");
    
    }
    
    
    void check(string s){
    	static int check = 0;
    
    	check++;
    
    	if(check > 1)
    		usage("Too many check-arguments");
    
    
    }
    
    
    void output(string s){
    	static int output = 0;
    
    	output++;
    	if(output > 1)
    		usage("Too many output-arguments");
    
    }
    
    
    void setCMD(string s){
    	if(s.length() > 2 && (s.at(0) == '.' && s.at(1) == '/'))
    		s = s.substr(2);
    
    	cmd = s;
    }
    }
    Alles anzeigen

    Data.h

    C
    #ifndef DATA_H_
    #define DATA_H_
    
    
    #include <string>
    #include <iostream>
    
    
    using namespace std;
    
    
    namespace data
    {
    	int N,M;
    	string cmd;
    
    
    	void usage(string s = "");
    	void printErr(string sz = "");
    	void input(string s);
    	void check(string s);
    	void output(string s);
    	void setCMD(string s);
    }
    
    
    #endif /*DATA_H_*/
    Alles anzeigen

    ach ja: übersetzten kein problem
    aber linken mag er nicht! (sobald ich die header-Datei in der main include)

    Code
    g++ -ansi -pedantic -Wall -c main.cpp
    g++ -ansi -pedantic -Wall -c GetOpt.cpp
    g++ -ansi -pedantic -Wall -c Data.cpp
    g++ -ansi -pedantic -Wall -c Option.cpp
    g++ -o mastermind -g main.o GetOpt.o Data.o Option.o
    Data.o:(.bss+0x8): multiple definition of `data::cmd'
    main.o:(.bss+0x8): first defined here
    Data.o:(.bss+0x0): multiple definition of `data::N'
    main.o:(.bss+0x0): first defined here
    Data.o:(.bss+0x4): multiple definition of `data::M'
    main.o:(.bss+0x4): first defined here
    collect2: ld returned 1 exit statusmake: *** [mastermind] Fehler 1
    Alles anzeigen
  • namespace

    • Leocor
    • 24. März 2008 um 14:30

    Hallo!

    ich programmier c++ noch nicht so lang! darum wird das eher ne leichte frage sein!

    ich hab eine Data.h:

    Code
    namespace data
    {
    	int N,M;
    
    
    	void usage(string s = "");
    	void printErr(string sz = "");
    	void input(string s);
    	void check(string s);
    	void output(string s);
    	void setCMD(string s);
    }
    Alles anzeigen


    &dazu noch eine Data.cpp wo ich die Funktionen definiere!
    sobald ich jetzt die Data.h in meiner main.cpp inlude

    schreit der compiler:
    ... multiple definition of `data::N'
    ../Data.cpp:6: first defined here

    und das geiche für M auch

    was mach ich falsch?

    PS: ach ja die meldung bringt er beim linken

  • Funktions-Pointer im Template

    • Leocor
    • 23. März 2008 um 22:46

    Danke hat mir sehr geholfen aber ich bin draufgekommen das man einfach:

    typedef void (*funcPtr)(string);
    map<string,funcPtr>...

    machen kann ... dann brauch ich keinen (kleinen) umweg machen:D

Rechtliches

Impressum

Datenschutzerklärung