std::basic_string fehler
-
// ComPort.cpp: Implementierung der Klasse CComPort. //#include "stdafx.h" #include "COMPort.h" #include <stdio.h> #include <iostream> ////////////////////////////////////////////////////////////////////// // Konstruktion/Destruktion ////////////////////////////////////////////////////////////////////// CCOMPort::CCOMPort() { this->m_fehler= NULL; this->m_hPort= 0; //Dateihandle =0 } CCOMPort::~CCOMPort() { this->Close(); } //öffnet ein serielle Schnittstelle und es können wichtige Parameter der seriellen Schnittstelle gesetzt werden BOOL CCOMPort::Init(int iPort, int iBaud, int iSize, int iParity, int stopbit, int fRtsControl, int iTimeout, int iTotalTimeout) { char port[]= "COM0123456789:"; //"Dateiname" sprintf(port, "COM%i:", iPort); //mit Port m_hPort = CreateFile( port, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if((int)this->m_hPort == -1) //wenn COM?: nicht vorhanden (-1) this->m_hPort=0; if(this->m_hPort !=0) //Handle ? { COMMTIMEOUTS comtime; //Timeouts ändern -> schnellere Kommunikation GetCommTimeouts(this->m_hPort, &comtime); comtime.ReadIntervalTimeout= iTimeout; comtime.ReadTotalTimeoutConstant= iTotalTimeout; comtime.WriteTotalTimeoutConstant= iTotalTimeout; comtime.ReadTotalTimeoutMultiplier=2; comtime.WriteTotalTimeoutMultiplier=0; SetCommTimeouts(this->m_hPort, &comtime); DCB dcb; //Gerätekommunikationsanpassung GetCommState(this->m_hPort, &dcb); dcb.BaudRate= iBaud; dcb.ByteSize= iSize; dcb.DCBlength= 28; dcb.EofChar= 0; dcb.ErrorChar= 0; dcb.fRtsControl= fRtsControl; dcb.Parity= iParity; dcb.StopBits= stopbit; dcb.fInX=0; dcb.fOutX=0; dcb.fAbortOnError= 1; SetCommState(this->m_hPort, &dcb); return true; } return false; } //sendet Daten zur seriellen Schnittstelle BOOL CCOMPort::Send(void *puffer, unsigned int len) { DWORD written= 0; if(isOpen()) { WriteFile(this->m_hPort, puffer, len, &written, NULL); } if(len == written) return true; return false; } //holt Daten von der seriellen Schnittstelle int CCOMPort::Receive(void *puffer, int len) { DWORD receive=0; char* mich; if(m_hPort !=0 && len >0) { ReadFile(m_hPort, puffer, len, &receive, NULL); } if(receive==0) this->m_fehler= mich; return receive; } //testet ob Zugang zur seriellen Schnittstelle besteht BOOL CCOMPort::isOpen() { if(m_hPort >0) return true; return false; } //schließt die serielle Schnittstelle BOOL CCOMPort::Close() { if(isOpen()) { CloseHandle(this->m_hPort); this->m_hPort= 0; return true; } return false; } ------------------------------------------------------------------- ComPort.h #if !defined(toosten_COMPORT_H) #define toosten_COMPORT_H #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include <windows.h> class CCOMPort { public: CCOMPort(); ~CCOMPort(); BOOL Init(int iPort, int Baud =9600, int Size =8, int Parity =0, int stopbit=0, int fRtsControl =2, int Timeout =100, int TotalTimeout =1000); BOOL Send(void *PUFFER, unsigned int nBYTES); int Receive(void *PUFFER, int MAXBYTES); BOOL isOpen(); BOOL Close(); private: char* m_fehler; HANDLE m_hPort; }; #endif // !defined(toosten_COMPORT_H) ---------------------------------------------------------------------------- sendstream.cpp /* Sends a stream to the MMDS where it will be broadcast #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "COMPort.h" //#include "slideshow.h" #ifdef LINUX #include <unistd.h> #endif #define MIN(a,b) (((a)<(b))?(a):(b)) int main (int argc, char **argv) { char *host = NULL; char *provider = NULL; int port = 10000; char *path = NULL; int framesize; int handle; //CCOMPort Neu; return 0; }
-
Das Problem ist ja auch wenn ich dann
CCOMPort Neu;
eingebe
erscheintn folgende medung
sendstream.o:sendstream.cpp:(.text+0x4ba): undefined reference to
\_\_\_gxx\_personality_sj0' sendstream.o:sendstream.cpp:(.text+0x512): undefined reference toCCOMPort::CCOMPort()'
sendstream.o:sendstream.cpp:(.text+0x934): undefined reference toCCOMPort::~CCOMPort()' sendstream.o:sendstream.cpp:(.text+0x967): undefined reference toCCOMPort::~CCOMPort()'
collect2: ld gab 1 als Ende-Status zur"uck
-
Wo genau verwendest du eigentlich iostream's oder string's? (beim ersten Überblick habe ich nichts gesehen)
Zu den Meldungen über CCOMPort::CComPort() - die treten auf, weil du die ComPort-Klasse nicht mit an den Linker übergeben hast.
-
Wie übergeb ich sie andem linker??
und zu dem Rest:
ich hab den include der iostream weggelassen und schon muckt er nicht mehr
das wars wohl
aber
-
Eigentlich sollte es gehen, wenn du dem Compiler alle beteiligten CPP's mitgibst.
-
Hat hingehaun..Jetzt bleibt noch die fehlermeldung
sendstream.o:sendstream.cpp:(.text+0x4ba): undefined reference to `___gxx_personality_sj0'
-
Der Fehler komtm wenn ich jetzt auch ein Objekt deklariereen möchte
CCOMPort Neu;
-
Der Ausdruck sieht insgesamt folgendeer Maßenb aus, wenn ich
CCOMPort Neu;
deklariere:
sendstream.o:sendstream.cpp:(.text+0x4ba): undefined reference to `___gxx_personality_sj0'
collect2:ld gab 1 als ENDE-Statud zurückDanke
-
Samuela schrieb:
Der Ausdruck sieht insgesamt folgendeer Maßenb aus, wenn ich
CCOMPort Neu;
deklariere:
sendstream.o:sendstream.cpp:(.text+0x4ba): undefined reference to `___gxx_personality_sj0'
collect2:ld gab 1 als ENDE-Statud zurückDanke
Das ist nicht nur eine Deklaration sondern auch eine Definition; hier wird implizit der Standardkonstriktor von CCOMPort aufgerufen, wie ich bereits geschrieben hatte.
Wenn Du mit dem gcc arbeitest solltest Du zum Linken g++ aufrufen; dann werden die richtigen libs hinzugebunden.
Allgemein vermute ich dass Du einfach
gcc sendstream.cppaufrufst.
Das ist zu wenig; Du musst ertmal alle Dateien kompilieren und dann die Module Binden.gcc -c sendstream.cpp gcc -c COMPort.cpp g++ sendstream.o ComPort.o -o a.outDessweiteren sollte man _NICHT_ <string.h> verwenden, schon gar nicht zusammen mit <iostream> verwenden;
der neue header heisst einfach <string>Grüsse
*this
-
Gast++ schrieb:
_NICHT_ <string.h> verwenden,
aber das brauch ich doch für strcpy LOL
-
Es funktioniert danke,danke,danke
-
Der neue Header anstelle von string.h heißt cstring und sollte natürlich verwendet werden.
-
Braunstein schrieb:
Der neue Header anstelle
Wenn Du schon Spass daran hast meine Beiträge zu lektorieren, dann bitte richtig - "anstelle von " war dan irgends zu lesen.
Stell mal eine Hypothese auf, warum die OP <string.h> inkludiert und dann lies das es nochmal durch.
Braunstein schrieb:
von steht doch steht doch
string.h heißt cstring und sollte natürlich verwendet werden.Von "sollen" kann da ohne weiteres gar keine Rede sein.
Verwenden "soll" man wol eher <string> und auf C-Strings verzichten.Dass ist immer das Problem mit Hobby-Lektoren in Foren; Aussagen aus dem Kontext zu reissen bringt ja vielleicht intellektuelle Genugtuung aber lösst nicht das Problem des OP.
Mir erscheint das immer als Überkompensation von Kommunikationsd3efiziten der "Lektoren". Es st kein Zeichen von Intelligenz etwas nicht zu verstehen.Problemlösend arbeiten meist die Autoren, nicht die Lektoren.
Lösungskompetenz wird zum Glück besser bezahlt.Grüsse
*this
-
Es war folgendes zu lesen
Dessweiteren sollte man _NICHT_ <string.h> verwenden, schon gar nicht zusammen mit <iostream> verwenden;
der neue header heisst einfach <string>Daraus habe ich entnommen, dass du die Verwendung von string statt string.h empfiehlst (was falsch ist). Daraus ist nicht zu ersehen, dass du eigentlich die Verwendung von std::string statt char* meinst.
Ich habe also nichts aus dem Kontext gerissen, du bist nur ziemlich empfindlich.
-
Braunstein schrieb:
Es war folgendes zu lesen
Dessweiteren sollte man _NICHT_ <string.h> verwenden, schon gar nicht zusammen mit <iostream> verwenden;
der neue header heisst einfach <string>Daraus habe ich entnommen, dass du die Verwendung von string statt string.h empfiehlst (was falsch ist).
Nein, das ist sogar sehr richtig - die Verwendung von string ist der Verwendung von string.h vorzuziehen.
Es sei denn man man Zeigerarithmetik.Braunstein schrieb:
Daraus ist nicht zu ersehen,
Was Du ersehen kannst ist gewiss kein Massstab. Ganz offensichtlich nicht.
Braunstein schrieb:
dass du eigentlich die Verwendung von std::string statt char* meinst.
Du implizierst etwas albern.
Braunstein schrieb:
Ich habe also nichts aus dem Kontext gerissen, du bist nur ziemlich empfindlich.

Ist das Deine praktische Übung zu "Polemik für Dummies"?
Grüsse
*this