<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Compilerabhängiger Fehler bei :: CHttpConnection]]></title><description><![CDATA[<p><strong>Code:</strong></p>
<p>//(CHttpConnection.cpp)</p>
<p>#define CBTR // Definieren, für Trace-Ausgaben<br />
#ifdef CBTR<br />
#include &lt;iostream&gt;<br />
#define CBTRACELN(s) std::cout &lt;&lt; (s) &lt;&lt; endl;<br />
#define CBTRACE(s) std::cout &lt;&lt; (s);<br />
#else<br />
#define CBTRACELN(s)<br />
#define CBTRACE(s)<br />
#endif</p>
<p>#include &quot;CHttpConnection.h&quot;<br />
#include &quot;CFile.h&quot;<br />
#include &quot;CMemory.h&quot;</p>
<p>#include &lt;vector&gt;</p>
<p>using namespace std;</p>
<p>namespace Codebook {</p>
<p>CHttpConnection::CHttpConnection()<br />
: m_iconn(0)<br />
{ }</p>
<p>bool CHttpConnection::connect(const std::string &amp;host, unsigned int port) {<br />
CBTRACELN(&quot;CHttpConnection::connect: Verbindung wird aufgebaut&quot;);<br />
/*<br />
** Eventuell bestehende Verbindung abbrechen<br />
<em>/<br />
disconnect();<br />
/</em><br />
** Internet-Verbindung mit entsprechender<br />
** Adresse und Port herstellen<br />
<em>/<br />
m_iconn=new CInternetConnection(host,port);<br />
if(m_iconn-&gt;isAvailable()) {<br />
CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}<br />
/</em><br />
** Verbindungsaufbau fehlgeschlagen?<br />
** =&gt; CInternetConnection-Objekt löschen<br />
*/<br />
else {<br />
m_lastError=&quot;Verbindungaufbau fehlgeschlagen!&quot;;<br />
CBTRACELN(&quot;Verbindungaufbau fehlgeschlagen!&quot;);<br />
delete(m_iconn);<br />
m_iconn=0;<br />
return(false);<br />
}<br />
}</p>
<p>bool CHttpConnection::connect(const CUrl &amp;url) {<br />
/*<br />
** Host und Port aus CUrl holen<br />
*/<br />
string host=url.getDomain();<br />
string sport=url.getPort();<br />
unsigned int port;</p>
<p>if(sport==&quot;&quot;)<br />
port=80;<br />
else<br />
port=atol(sport.c_str());<br />
/*<br />
** connect für Host und Port aufrufen<br />
*/<br />
return(connect(host,port));<br />
}</p>
<p>void CHttpConnection::disconnect() {<br />
if(m_iconn) {<br />
delete(m_iconn);<br />
m_iconn=0;<br />
}<br />
}</p>
<p>//***************************************************************<br />
// sendRequest<br />
//***************************************************************</p>
<p>bool CHttpConnection::sendRequest(const CHttpRequest &amp;request) {<br />
CBTRACELN(&quot;\nsendRequest\n-----------------------------------------------------&quot;);<br />
/*<br />
** Request senden<br />
<em>/<br />
string sreq=request.getRequest();<br />
CBTRACE(sreq);<br />
unsigned int sent=m_iconn-&gt;sendLine(sreq);<br />
/</em><br />
** Sind weniger Zeichen gesendet worden als<br />
** der Request lang ist?<br />
** =&gt; Fehler!<br />
*/<br />
if(sent&lt;sreq.size()) {<br />
m_lastError=&quot;sendRequest fehlgeschlagen!&quot;;<br />
CBTRACELN(&quot;sendRequest fehlgeschlagen!&quot;);<br />
return(false);<br />
}<br />
else {<br />
CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}<br />
}</p>
<p>//***************************************************************<br />
// receiveResponse<br />
//***************************************************************</p>
<p>bool CHttpConnection::receiveResponse(vector&lt;string&gt; &amp;response) {<br />
CBTRACELN(&quot;\nreceiveResponse\n-----------------------------------------------------&quot;);<br />
string line;<br />
/*<br />
** Server-Response zeilenweise einlesen<br />
*/<br />
while((line=m_iconn-&gt;receiveLine())!=&quot;&quot;) {<br />
CBTRACELN(&quot;Empfangen: &quot;+line);<br />
response.push_back(line);<br />
}<br />
if(response.size()==0)<br />
return(false);<br />
else<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// getHeadHeader<br />
//***************************************************************</p>
<p>bool CHttpConnection::getHeadHeader(const CUrl &amp;url, vector&lt;string&gt; &amp;header) {<br />
CBTRACELN(&quot;\ngetHeadHeader\n-----------------------------------------------------&quot;);<br />
/*<br />
** Head-Request formulieren<br />
<em>/<br />
CHttpRequest request;<br />
request.setFromUrl(url);<br />
request.setRequestType(CHttpRequest::rtHEAD);<br />
request.setUserAgent(CHttpRequest::UAExplorer6);<br />
/</em><br />
** Verbindung aufbauen<br />
<em>/<br />
if(!connect(url)) {<br />
m_lastError=&quot;Fehler bei connect&quot;;<br />
CBTRACELN(&quot;Fehler bei connect&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Request senden<br />
<em>/<br />
if(!sendRequest(request)) {<br />
m_lastError=&quot;Fehler bei sendRequest&quot;;<br />
CBTRACELN(&quot;Fehler bei sendRequest&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Antwort empfangen<br />
*/<br />
if(!receiveResponse(header)) {<br />
m_lastError=&quot;Fehler bei receiveResponse&quot;;<br />
CBTRACELN(&quot;Fehler bei receiveResponse&quot;);<br />
return(false);<br />
}</p>
<p>CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}</p>
<p>bool CHttpConnection::getHeadHeader(const CUrl &amp;url, CHttpResponse &amp;header) {<br />
vector&lt;string&gt; vr;<br />
if(!getHeadHeader(url, vr))<br />
return(false);<br />
header.extract(vr);<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// getTraceHeader<br />
//***************************************************************</p>
<p>bool CHttpConnection::getTraceHeader(const CUrl &amp;url, vector&lt;string&gt; &amp;header, int maxforwards) {<br />
CBTRACELN(&quot;\ngetTraceHeader\n-----------------------------------------------------&quot;);<br />
/*<br />
** Head-Request formulieren<br />
<em>/<br />
CHttpRequest request;<br />
request.setFromUrl(url);<br />
request.setRequestType(CHttpRequest::rtTRACE);<br />
request.setUserAgent(CHttpRequest::UAExplorer6);<br />
request.setMaxForwards(maxforwards);<br />
/</em><br />
** Verbindung aufbauen<br />
<em>/<br />
if(!connect(url)) {<br />
m_lastError=&quot;Fehler bei connect&quot;;<br />
CBTRACELN(&quot;Fehler bei connect&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Request senden<br />
<em>/<br />
if(!sendRequest(request)) {<br />
m_lastError=&quot;Fehler bei sendRequest&quot;;<br />
CBTRACELN(&quot;Fehler bei sendRequest&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Antwort empfangen<br />
*/<br />
if(!receiveResponse(header)) {<br />
m_lastError=&quot;Fehler bei receiveResponse&quot;;<br />
CBTRACELN(&quot;Fehler bei receiveResponse&quot;);<br />
return(false);<br />
}</p>
<p>CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}</p>
<p>bool CHttpConnection::getTraceHeader(const CUrl &amp;url, CHttpResponse &amp;header, int maxforwards) {<br />
vector&lt;string&gt; vr;<br />
if(!getTraceHeader(url, vr, maxforwards))<br />
return(false);<br />
header.extract(vr);<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// getFile<br />
//***************************************************************</p>
<p>bool CHttpConnection::getFile(const CUrl &amp;url, const string &amp;filename) {<br />
CHttpRequest request;<br />
request.setFromUrl(url);<br />
request.setUserAgent(CHttpRequest::UAExplorer6);</p>
<p>return(getFile(url,filename,request));<br />
}</p>
<p>//***************************************************************<br />
// getFile<br />
//***************************************************************</p>
<p>bool CHttpConnection::getFile(const CUrl &amp;url, const string &amp;filename, const CHttpRequest &amp;request) {<br />
CBTRACELN(&quot;\ngetFile\n-----------------------------------------------------&quot;);</p>
<p>/*<br />
** Verbindung zum Server herstellen<br />
<em>/<br />
if(!connect(url)) {<br />
m_lastError=&quot;Fehler bei connect&quot;;<br />
CBTRACELN(&quot;Fehler bei connect&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Request senden<br />
<em>/<br />
if(!sendRequest(request)) {<br />
m_lastError=&quot;Fehler bei sendRequest&quot;;<br />
CBTRACELN(&quot;Fehler bei sendRequest&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Server-Response empfangen<br />
<em>/<br />
vector&lt;string&gt; vresponse;<br />
if(!receiveResponse(vresponse)) {<br />
m_lastError=&quot;Fehler bei receiveResponse&quot;;<br />
CBTRACELN(&quot;Fehler bei receiveResponse&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Response in ein CHttpResponse-Objekt umwandeln<br />
<em>/<br />
bool success;<br />
CHttpResponse response;<br />
response.extract(vresponse);<br />
int code=response.getStatusCode();<br />
/</em><br />
** Status zwischen 301 und 307?<br />
** =&gt; Ressource wurde verschoben. Neue Location aus<br />
** Response holen und getFile neu aufrufen<br />
<em>/<br />
if((code&gt;=301)&amp;&amp;(code&lt;=307)&amp;&amp;(response.getLocation()!=&quot;&quot;)) {<br />
CBTRACELN(&quot;\nRessource verschoben. Neue Location bearbeiten...&quot;);<br />
disconnect();<br />
return(getFile(CUrl(response.getLocation()), filename));<br />
}<br />
/</em><br />
** Alle Status-Codes außerhalb des 200er-Bereichs<br />
** als Fehler betrachten<br />
<em>/<br />
else if((response.getStatusCode()&lt;200)||(response.getStatusCode()&gt;=300)) {<br />
m_lastError=toString(response.getStatusCode())+&quot; &quot;+response.getStatusText();<br />
CBTRACELN(&quot;Server meldet Fehler&quot;);<br />
return(false);<br />
}<br />
else {<br />
/</em><br />
** Je nachdem, ob Transfer an einem Stück oder<br />
** in Chunks benötigt wird, die entsprechende<br />
** Methode aufrufen<br />
<em>/<br />
if(!response.isTransferChunked())<br />
success=normalFileTransfer(filename, response);<br />
else {<br />
success=chunkedFileTransfer(filename, response);<br />
/</em><br />
** Hat ein Transfer in Chunks stattgefunden?<br />
** =&gt; Hinter den Chunks nach eventuellen Entity-Headern<br />
** Ausschau halten<br />
<em>/<br />
if(success) {<br />
vresponse.clear();<br />
receiveResponse(vresponse);<br />
response.extract(vresponse,false);<br />
}<br />
}<br />
}<br />
/</em><br />
** Komplette Server-Antwort im Objekt speichern<br />
*/<br />
m_lastResponse=response;<br />
return(success);<br />
}</p>
<p>//***************************************************************<br />
// normalFileTransfer<br />
//***************************************************************</p>
<p>bool CHttpConnection::normalFileTransfer(const std::string &amp;filename, const CHttpResponse &amp;response) {<br />
/*<br />
** Datei auf lokalem Datenträger zum Schreiben öffnen<br />
*/<br />
CFile file;<br />
if(!file.open(filename,true,true)) {<br />
m_lastError=&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;;<br />
CBTRACELN(&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;);<br />
return(false);<br />
}<br />
CMemory&lt;char&gt; buf(10000);<br />
unsigned int amount;<br />
CHugeNumber totallyRead, bufsize(&quot;10000&quot;);</p>
<p>/*<br />
** Wenn Content-Length verfügbar, dann werden abgezählte<br />
** Daten empfangen<br />
<em>/<br />
if(response.isContenLengthAvailable()) {<br />
CHugeNumber length=response.getContentLength();<br />
CBTRACELN(&quot;Abgezaehlte Daten (&quot;+length.getAsPointedNumber()+&quot;) werden gelesen!&quot;);<br />
do {<br />
/</em><br />
** Darauf achten, dass nicht mehr Daten empfangen<br />
** werden sollen als benötigt werden (weil read sonst<br />
** blockiert.)<br />
*/<br />
if(length&gt;=bufsize)<br />
amount=m_iconn-&gt;receive(buf,10000);<br />
else<br />
amount=m_iconn-&gt;receive(buf,length.getAsUnsignedLong());</p>
<p>file.writeBlock(buf,amount);<br />
totallyRead+=static_cast&lt;unsigned long&gt;(amount);<br />
length-=static_cast&lt;unsigned long&gt;(amount);<br />
CBTRACE(&quot;Bisher uebertragen: &quot;+totallyRead.getAsPointedNumber()+&quot; Bytes\r&quot;);<br />
/*<br />
** Keine Daten mehr empfangen, obwohl noch nicht alle Daten<br />
** angekommen sind?<br />
** =&gt; Fehler!<br />
<em>/<br />
if((totallyRead==0)&amp;&amp;(length!=0)) {<br />
m_lastError=&quot;chunkedTransfer: Übertragung abgebrochen&quot;;<br />
CBTRACE(&quot;chunkedTransfer: Übertragung abgebrochen&quot;);<br />
return(false);<br />
}<br />
} while(length!=0);<br />
}<br />
/</em><br />
** Wenn keine Content-Length verfügbar, dann Daten<br />
** empfangen, bis der Server die Verbindung trennt<br />
*/<br />
else {<br />
CBTRACELN(&quot;Daten lesen bis zum Ende!&quot;);<br />
do {<br />
amount=m_iconn-&gt;receive(buf,10000);<br />
file.writeBlock(buf,amount);<br />
totallyRead+=static_cast&lt;unsigned long&gt;(amount);<br />
CBTRACE(&quot;Bisher uebertragen: &quot;+totallyRead.getAsPointedNumber()+&quot; Bytes\r&quot;);<br />
} while(amount);<br />
}</p>
<p>CBTRACELN(&quot;\nErfolg!&quot;);<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// chunkedFileTransfer<br />
//***************************************************************</p>
<p>bool CHttpConnection::chunkedFileTransfer(const std::string &amp;filename, const CHttpResponse &amp;response) {<br />
CBTRACELN(&quot;Uebertragung in Chunks beginnt...&quot;);<br />
/*<br />
** Datei auf lokalem Datenträger zum Schreiben öffnen<br />
<em>/<br />
CFile file;<br />
if(!file.open(filename,true,true)) {<br />
m_lastError=&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;;<br />
CBTRACELN(&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;);<br />
return(false);<br />
}<br />
CMemory&lt;char&gt; buf(10000);<br />
unsigned int amount;<br />
CHugeNumber totallyRead, bufsize(&quot;10000&quot;);<br />
/</em><br />
** Größe des ersten Chunks einlesen<br />
<em>/<br />
CHugeNumber length=hexToValue(m_iconn-&gt;receiveLine());<br />
/</em><br />
** Solange eingelesene Chunk-Größe != 0<br />
<em>/<br />
while(length!=0) {<br />
CBTRACELN(&quot;Chungroesse : &quot;+length.getAsPointedNumber()+&quot; Bytes&quot;);<br />
do {<br />
/</em><br />
** Darauf achten, dass nicht mehr Daten empfangen<br />
** werden als Chunk groß ist<br />
*/<br />
if(length&gt;=bufsize)<br />
amount=m_iconn-&gt;receive(buf,10000);<br />
else<br />
amount=m_iconn-&gt;receive(buf,length.getAsUnsignedLong());</p>
<p>file.writeBlock(buf,amount);<br />
totallyRead+=static_cast&lt;unsigned long&gt;(amount);<br />
length-=static_cast&lt;unsigned long&gt;(amount);<br />
CBTRACE(&quot;Bisher uebertragen: &quot;+totallyRead.getAsPointedNumber()+&quot; Bytes\r&quot;);<br />
if((totallyRead==0)&amp;&amp;(length!=0)) {<br />
m_lastError=&quot;chunkedTransfer: Übertragung abgebrochen&quot;;<br />
CBTRACE(&quot;chunkedTransfer: Übertragung abgebrochen&quot;);<br />
return(false);<br />
}</p>
<p>} while(length!=0);</p>
<p>CBTRACELN(&quot;&quot;);<br />
/*<br />
** CRLF hinter Chunk-Datn einlesen<br />
<em>/<br />
m_iconn-&gt;receiveLine();<br />
/</em><br />
** Größe des nächsten Chunks einlesen<br />
*/<br />
length=hexToValue(m_iconn-&gt;receiveLine());<br />
}</p>
<p>CBTRACELN(&quot;\nErfolg!&quot;);<br />
return(true);<br />
}</p>
<p>}; // namespace Codebook</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p><strong>Fehler:</strong></p>
<p>&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::eq(const char &amp;,const char &amp;) in Zeile 19<br />
&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::eq(const char &amp;,const char &amp;) in Zeile 19<br />
&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::lt(const char &amp;,const char &amp;) in Zeile 23<br />
&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::lt(const char &amp;,const char &amp;) in Zeile 23<br />
&quot;CHttpRequest.h&quot;: E2361 'const' wurde bereits einbezogen in Zeile 16<br />
&quot;CHttpRequest.h&quot;: E2361 'const' wurde bereits einbezogen in Zeile 17<br />
&quot;CSpecificINetConn.h&quot;: E2209 include-Datei 'afxsock.h' kann nicht geöffnet werden in Zeile 6<br />
&quot;CSpecificINetConn.h&quot;: E2312 'runtime_error' ist keine eindeutige Basisklasse von 'internet_error' in Funktion internet_error::internet_error(const _STL::string &amp;) in Zeile 16<br />
&quot;CSpecificINetConn.h&quot;: E2251 Standardkonstruktor zum Initialisieren der Basisklasse '_STL::runtime_error' nicht gefunden in Funktion internet_error::internet_error(const _STL::string &amp;) in Zeile 17<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 22<br />
&quot;CSpecificINetConn.h&quot;: E2303 Typname erwartet in Zeile 23<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 23<br />
&quot;CSpecificINetConn.h&quot;: E2303 Typname erwartet in Zeile 24<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 24<br />
&quot;CSpecificINetConn.h&quot;: E2303 Typname erwartet in Zeile 25<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 25<br />
&quot;CHttpConnection.cpp&quot;: W8057 Parameter 'response' wird nie verwendet. in Funktion CHttpConnection::chunkedFileTransfer(const string &amp;,const CHttpResponse &amp;) in Zeile 469<br />
*** 16 Fehler bei der Compilierung ***<br />
BCC32 beendet mit Fehler-Code: 1<br />
Erzeugen wegen Fehler abgebrochen</p>
<p><strong>Problematischer Header:</strong></p>
<p>//(IString.h)</p>
<p>#ifndef __ISTRING_H<br />
#define __ISTRING_H</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;string&gt;</p>
<p>namespace Codebook {</p>
<p>struct insensitive_char_traits {<br />
typedef char char_type;<br />
typedef int int_type;</p>
<p>static void assign(char&amp; c1, const char&amp; c2) {<br />
c1 = c2;<br />
}</p>
<p>static bool eq(const char&amp; c1, const char&amp; c2) {<br />
return (tolower(c1) == tolower(c2));<br />
}</p>
<p>static bool lt(const char&amp; c1, const char&amp; c2) {<br />
return (tolower(c1) &lt; tolower(c2));<br />
}</p>
<p>static int compare(const char *s1, const char *s2, size_t len) {<br />
for (; 0 &lt; len; --len, ++s1, ++s2)<br />
if (!eq(*s1, *s2))<br />
return (lt(*s1, *s2) ? -1 : +1);<br />
return (0);<br />
}</p>
<p>static size_t length(const char *s) {<br />
size_t len;<br />
for (len = 0; !eq(*s, char()); ++s)<br />
++len;<br />
return (len);<br />
}</p>
<p>static char *copy(char *s1, const char *s2, size_t len) {<br />
char *ptr = s1;<br />
for (; 0 &lt; len; --len, ++ptr, ++s2)<br />
assign(*ptr, *s2);<br />
return (s1);<br />
}</p>
<p>static const char *find(const char *s, size_t len, const char&amp; c) {<br />
for (; 0 &lt; len; --len, ++s)<br />
if (eq(*s, c))<br />
return (s);<br />
return (0);<br />
}</p>
<p>static char *move(char *s1, const char *s2, size_t len) {<br />
char <em>ptr = s1;<br />
if (s2 &lt; ptr &amp;&amp; ptr &lt; s2 + len)<br />
for (ptr += len, s2 += len; 0 &lt; len; --len)<br />
assign(</em>--ptr, *--s2);<br />
else<br />
for (; 0 &lt; len; --len, ++ptr, ++s2)<br />
assign(*ptr, *s2);<br />
return (s1);<br />
}</p>
<p>static char *assign(char *s, size_t len, char c) {<br />
char *ptr = s;<br />
for (; 0 &lt; len; --len, ++ptr)<br />
assign(*ptr, c);<br />
return (s);<br />
}</p>
<p>static char to_char_type(const int_type&amp; i) {<br />
return (i);<br />
}</p>
<p>static int_type to_int_type(const char&amp; c) {<br />
return (c);<br />
}</p>
<p>static bool eq_int_type(const int_type&amp; c1, const int_type&amp; c2) {<br />
return (c1 == c2);<br />
}</p>
<p>static int_type eof() {<br />
return ((int_type)EOF);<br />
}</p>
<p>static int_type not_eof(const int_type&amp; i) {<br />
return (i != eof() ? i : !eof());<br />
}</p>
<p>};</p>
<p>typedef std::basic_string&lt;char, insensitive_char_traits, std::allocator&lt;char&gt; &gt;<br />
insensitive_string;</p>
<p>}; // ende namespace Codebook<br />
#endif</p>
<p><strong>Post:</strong></p>
<p>Der Code sollte eigentlich funktionieren, allerdings macht er mir über Windows/C++BuilderXPersonal faxen! Ich hab kp, warum da soviele unsinnige Fehler kommen?!</p>
<p>Wäre nett wenn sich jemand dem Problem annehmen könnte.</p>
<p>Ich bin eigentlich nicht so gut in C++, die Datei ist aus dem Buch: &quot;Das C++ Codebook&quot;! Ich will versuchen das Programm nachzuvollziehen, doch es wäre gut, wenn es erstmal fehlerfrei wäre!</p>
<p>Vielen Dank schonmal für die Hilfe,</p>
<p>mfg<br />
HaNoCr.</p>
<p>Ps:<br />
Kann mir mal einer sagen, wie man den Code, gleich übersichtlich übernehmen kann? So wie es jetzt ist, sieht es (ohne Tabs u. Farben) doch eher unübersichtlich aus.<br />
Wie macht ihr das ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich mein, wenn ich den Artikel bearbeite, sind die Tabs ja wenigstens noch da, aber wenn man sich den Artikel dann fertig anguckt sind se weg ?!<br />
...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/164045/compilerabhängiger-fehler-bei-chttpconnection</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 06:37:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/164045.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 04 Nov 2006 15:22:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Compilerabhängiger Fehler bei :: CHttpConnection on Sat, 04 Nov 2006 15:27:43 GMT]]></title><description><![CDATA[<p><strong>Code:</strong></p>
<p>//(CHttpConnection.cpp)</p>
<p>#define CBTR // Definieren, für Trace-Ausgaben<br />
#ifdef CBTR<br />
#include &lt;iostream&gt;<br />
#define CBTRACELN(s) std::cout &lt;&lt; (s) &lt;&lt; endl;<br />
#define CBTRACE(s) std::cout &lt;&lt; (s);<br />
#else<br />
#define CBTRACELN(s)<br />
#define CBTRACE(s)<br />
#endif</p>
<p>#include &quot;CHttpConnection.h&quot;<br />
#include &quot;CFile.h&quot;<br />
#include &quot;CMemory.h&quot;</p>
<p>#include &lt;vector&gt;</p>
<p>using namespace std;</p>
<p>namespace Codebook {</p>
<p>CHttpConnection::CHttpConnection()<br />
: m_iconn(0)<br />
{ }</p>
<p>bool CHttpConnection::connect(const std::string &amp;host, unsigned int port) {<br />
CBTRACELN(&quot;CHttpConnection::connect: Verbindung wird aufgebaut&quot;);<br />
/*<br />
** Eventuell bestehende Verbindung abbrechen<br />
<em>/<br />
disconnect();<br />
/</em><br />
** Internet-Verbindung mit entsprechender<br />
** Adresse und Port herstellen<br />
<em>/<br />
m_iconn=new CInternetConnection(host,port);<br />
if(m_iconn-&gt;isAvailable()) {<br />
CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}<br />
/</em><br />
** Verbindungsaufbau fehlgeschlagen?<br />
** =&gt; CInternetConnection-Objekt löschen<br />
*/<br />
else {<br />
m_lastError=&quot;Verbindungaufbau fehlgeschlagen!&quot;;<br />
CBTRACELN(&quot;Verbindungaufbau fehlgeschlagen!&quot;);<br />
delete(m_iconn);<br />
m_iconn=0;<br />
return(false);<br />
}<br />
}</p>
<p>bool CHttpConnection::connect(const CUrl &amp;url) {<br />
/*<br />
** Host und Port aus CUrl holen<br />
*/<br />
string host=url.getDomain();<br />
string sport=url.getPort();<br />
unsigned int port;</p>
<p>if(sport==&quot;&quot;)<br />
port=80;<br />
else<br />
port=atol(sport.c_str());<br />
/*<br />
** connect für Host und Port aufrufen<br />
*/<br />
return(connect(host,port));<br />
}</p>
<p>void CHttpConnection::disconnect() {<br />
if(m_iconn) {<br />
delete(m_iconn);<br />
m_iconn=0;<br />
}<br />
}</p>
<p>//***************************************************************<br />
// sendRequest<br />
//***************************************************************</p>
<p>bool CHttpConnection::sendRequest(const CHttpRequest &amp;request) {<br />
CBTRACELN(&quot;\nsendRequest\n-----------------------------------------------------&quot;);<br />
/*<br />
** Request senden<br />
<em>/<br />
string sreq=request.getRequest();<br />
CBTRACE(sreq);<br />
unsigned int sent=m_iconn-&gt;sendLine(sreq);<br />
/</em><br />
** Sind weniger Zeichen gesendet worden als<br />
** der Request lang ist?<br />
** =&gt; Fehler!<br />
*/<br />
if(sent&lt;sreq.size()) {<br />
m_lastError=&quot;sendRequest fehlgeschlagen!&quot;;<br />
CBTRACELN(&quot;sendRequest fehlgeschlagen!&quot;);<br />
return(false);<br />
}<br />
else {<br />
CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}<br />
}</p>
<p>//***************************************************************<br />
// receiveResponse<br />
//***************************************************************</p>
<p>bool CHttpConnection::receiveResponse(vector&lt;string&gt; &amp;response) {<br />
CBTRACELN(&quot;\nreceiveResponse\n-----------------------------------------------------&quot;);<br />
string line;<br />
/*<br />
** Server-Response zeilenweise einlesen<br />
*/<br />
while((line=m_iconn-&gt;receiveLine())!=&quot;&quot;) {<br />
CBTRACELN(&quot;Empfangen: &quot;+line);<br />
response.push_back(line);<br />
}<br />
if(response.size()==0)<br />
return(false);<br />
else<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// getHeadHeader<br />
//***************************************************************</p>
<p>bool CHttpConnection::getHeadHeader(const CUrl &amp;url, vector&lt;string&gt; &amp;header) {<br />
CBTRACELN(&quot;\ngetHeadHeader\n-----------------------------------------------------&quot;);<br />
/*<br />
** Head-Request formulieren<br />
<em>/<br />
CHttpRequest request;<br />
request.setFromUrl(url);<br />
request.setRequestType(CHttpRequest::rtHEAD);<br />
request.setUserAgent(CHttpRequest::UAExplorer6);<br />
/</em><br />
** Verbindung aufbauen<br />
<em>/<br />
if(!connect(url)) {<br />
m_lastError=&quot;Fehler bei connect&quot;;<br />
CBTRACELN(&quot;Fehler bei connect&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Request senden<br />
<em>/<br />
if(!sendRequest(request)) {<br />
m_lastError=&quot;Fehler bei sendRequest&quot;;<br />
CBTRACELN(&quot;Fehler bei sendRequest&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Antwort empfangen<br />
*/<br />
if(!receiveResponse(header)) {<br />
m_lastError=&quot;Fehler bei receiveResponse&quot;;<br />
CBTRACELN(&quot;Fehler bei receiveResponse&quot;);<br />
return(false);<br />
}</p>
<p>CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}</p>
<p>bool CHttpConnection::getHeadHeader(const CUrl &amp;url, CHttpResponse &amp;header) {<br />
vector&lt;string&gt; vr;<br />
if(!getHeadHeader(url, vr))<br />
return(false);<br />
header.extract(vr);<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// getTraceHeader<br />
//***************************************************************</p>
<p>bool CHttpConnection::getTraceHeader(const CUrl &amp;url, vector&lt;string&gt; &amp;header, int maxforwards) {<br />
CBTRACELN(&quot;\ngetTraceHeader\n-----------------------------------------------------&quot;);<br />
/*<br />
** Head-Request formulieren<br />
<em>/<br />
CHttpRequest request;<br />
request.setFromUrl(url);<br />
request.setRequestType(CHttpRequest::rtTRACE);<br />
request.setUserAgent(CHttpRequest::UAExplorer6);<br />
request.setMaxForwards(maxforwards);<br />
/</em><br />
** Verbindung aufbauen<br />
<em>/<br />
if(!connect(url)) {<br />
m_lastError=&quot;Fehler bei connect&quot;;<br />
CBTRACELN(&quot;Fehler bei connect&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Request senden<br />
<em>/<br />
if(!sendRequest(request)) {<br />
m_lastError=&quot;Fehler bei sendRequest&quot;;<br />
CBTRACELN(&quot;Fehler bei sendRequest&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Antwort empfangen<br />
*/<br />
if(!receiveResponse(header)) {<br />
m_lastError=&quot;Fehler bei receiveResponse&quot;;<br />
CBTRACELN(&quot;Fehler bei receiveResponse&quot;);<br />
return(false);<br />
}</p>
<p>CBTRACELN(&quot;Erfolg!&quot;);<br />
return(true);<br />
}</p>
<p>bool CHttpConnection::getTraceHeader(const CUrl &amp;url, CHttpResponse &amp;header, int maxforwards) {<br />
vector&lt;string&gt; vr;<br />
if(!getTraceHeader(url, vr, maxforwards))<br />
return(false);<br />
header.extract(vr);<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// getFile<br />
//***************************************************************</p>
<p>bool CHttpConnection::getFile(const CUrl &amp;url, const string &amp;filename) {<br />
CHttpRequest request;<br />
request.setFromUrl(url);<br />
request.setUserAgent(CHttpRequest::UAExplorer6);</p>
<p>return(getFile(url,filename,request));<br />
}</p>
<p>//***************************************************************<br />
// getFile<br />
//***************************************************************</p>
<p>bool CHttpConnection::getFile(const CUrl &amp;url, const string &amp;filename, const CHttpRequest &amp;request) {<br />
CBTRACELN(&quot;\ngetFile\n-----------------------------------------------------&quot;);</p>
<p>/*<br />
** Verbindung zum Server herstellen<br />
<em>/<br />
if(!connect(url)) {<br />
m_lastError=&quot;Fehler bei connect&quot;;<br />
CBTRACELN(&quot;Fehler bei connect&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Request senden<br />
<em>/<br />
if(!sendRequest(request)) {<br />
m_lastError=&quot;Fehler bei sendRequest&quot;;<br />
CBTRACELN(&quot;Fehler bei sendRequest&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Server-Response empfangen<br />
<em>/<br />
vector&lt;string&gt; vresponse;<br />
if(!receiveResponse(vresponse)) {<br />
m_lastError=&quot;Fehler bei receiveResponse&quot;;<br />
CBTRACELN(&quot;Fehler bei receiveResponse&quot;);<br />
return(false);<br />
}<br />
/</em><br />
** Response in ein CHttpResponse-Objekt umwandeln<br />
<em>/<br />
bool success;<br />
CHttpResponse response;<br />
response.extract(vresponse);<br />
int code=response.getStatusCode();<br />
/</em><br />
** Status zwischen 301 und 307?<br />
** =&gt; Ressource wurde verschoben. Neue Location aus<br />
** Response holen und getFile neu aufrufen<br />
<em>/<br />
if((code&gt;=301)&amp;&amp;(code&lt;=307)&amp;&amp;(response.getLocation()!=&quot;&quot;)) {<br />
CBTRACELN(&quot;\nRessource verschoben. Neue Location bearbeiten...&quot;);<br />
disconnect();<br />
return(getFile(CUrl(response.getLocation()), filename));<br />
}<br />
/</em><br />
** Alle Status-Codes außerhalb des 200er-Bereichs<br />
** als Fehler betrachten<br />
<em>/<br />
else if((response.getStatusCode()&lt;200)||(response.getStatusCode()&gt;=300)) {<br />
m_lastError=toString(response.getStatusCode())+&quot; &quot;+response.getStatusText();<br />
CBTRACELN(&quot;Server meldet Fehler&quot;);<br />
return(false);<br />
}<br />
else {<br />
/</em><br />
** Je nachdem, ob Transfer an einem Stück oder<br />
** in Chunks benötigt wird, die entsprechende<br />
** Methode aufrufen<br />
<em>/<br />
if(!response.isTransferChunked())<br />
success=normalFileTransfer(filename, response);<br />
else {<br />
success=chunkedFileTransfer(filename, response);<br />
/</em><br />
** Hat ein Transfer in Chunks stattgefunden?<br />
** =&gt; Hinter den Chunks nach eventuellen Entity-Headern<br />
** Ausschau halten<br />
<em>/<br />
if(success) {<br />
vresponse.clear();<br />
receiveResponse(vresponse);<br />
response.extract(vresponse,false);<br />
}<br />
}<br />
}<br />
/</em><br />
** Komplette Server-Antwort im Objekt speichern<br />
*/<br />
m_lastResponse=response;<br />
return(success);<br />
}</p>
<p>//***************************************************************<br />
// normalFileTransfer<br />
//***************************************************************</p>
<p>bool CHttpConnection::normalFileTransfer(const std::string &amp;filename, const CHttpResponse &amp;response) {<br />
/*<br />
** Datei auf lokalem Datenträger zum Schreiben öffnen<br />
*/<br />
CFile file;<br />
if(!file.open(filename,true,true)) {<br />
m_lastError=&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;;<br />
CBTRACELN(&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;);<br />
return(false);<br />
}<br />
CMemory&lt;char&gt; buf(10000);<br />
unsigned int amount;<br />
CHugeNumber totallyRead, bufsize(&quot;10000&quot;);</p>
<p>/*<br />
** Wenn Content-Length verfügbar, dann werden abgezählte<br />
** Daten empfangen<br />
<em>/<br />
if(response.isContenLengthAvailable()) {<br />
CHugeNumber length=response.getContentLength();<br />
CBTRACELN(&quot;Abgezaehlte Daten (&quot;+length.getAsPointedNumber()+&quot;) werden gelesen!&quot;);<br />
do {<br />
/</em><br />
** Darauf achten, dass nicht mehr Daten empfangen<br />
** werden sollen als benötigt werden (weil read sonst<br />
** blockiert.)<br />
*/<br />
if(length&gt;=bufsize)<br />
amount=m_iconn-&gt;receive(buf,10000);<br />
else<br />
amount=m_iconn-&gt;receive(buf,length.getAsUnsignedLong());</p>
<p>file.writeBlock(buf,amount);<br />
totallyRead+=static_cast&lt;unsigned long&gt;(amount);<br />
length-=static_cast&lt;unsigned long&gt;(amount);<br />
CBTRACE(&quot;Bisher uebertragen: &quot;+totallyRead.getAsPointedNumber()+&quot; Bytes\r&quot;);<br />
/*<br />
** Keine Daten mehr empfangen, obwohl noch nicht alle Daten<br />
** angekommen sind?<br />
** =&gt; Fehler!<br />
<em>/<br />
if((totallyRead==0)&amp;&amp;(length!=0)) {<br />
m_lastError=&quot;chunkedTransfer: Übertragung abgebrochen&quot;;<br />
CBTRACE(&quot;chunkedTransfer: Übertragung abgebrochen&quot;);<br />
return(false);<br />
}<br />
} while(length!=0);<br />
}<br />
/</em><br />
** Wenn keine Content-Length verfügbar, dann Daten<br />
** empfangen, bis der Server die Verbindung trennt<br />
*/<br />
else {<br />
CBTRACELN(&quot;Daten lesen bis zum Ende!&quot;);<br />
do {<br />
amount=m_iconn-&gt;receive(buf,10000);<br />
file.writeBlock(buf,amount);<br />
totallyRead+=static_cast&lt;unsigned long&gt;(amount);<br />
CBTRACE(&quot;Bisher uebertragen: &quot;+totallyRead.getAsPointedNumber()+&quot; Bytes\r&quot;);<br />
} while(amount);<br />
}</p>
<p>CBTRACELN(&quot;\nErfolg!&quot;);<br />
return(true);<br />
}</p>
<p>//***************************************************************<br />
// chunkedFileTransfer<br />
//***************************************************************</p>
<p>bool CHttpConnection::chunkedFileTransfer(const std::string &amp;filename, const CHttpResponse &amp;response) {<br />
CBTRACELN(&quot;Uebertragung in Chunks beginnt...&quot;);<br />
/*<br />
** Datei auf lokalem Datenträger zum Schreiben öffnen<br />
<em>/<br />
CFile file;<br />
if(!file.open(filename,true,true)) {<br />
m_lastError=&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;;<br />
CBTRACELN(&quot;FEHLER! Lokale Datei konnte nicht zum Schreiben geoeffnet werden!&quot;);<br />
return(false);<br />
}<br />
CMemory&lt;char&gt; buf(10000);<br />
unsigned int amount;<br />
CHugeNumber totallyRead, bufsize(&quot;10000&quot;);<br />
/</em><br />
** Größe des ersten Chunks einlesen<br />
<em>/<br />
CHugeNumber length=hexToValue(m_iconn-&gt;receiveLine());<br />
/</em><br />
** Solange eingelesene Chunk-Größe != 0<br />
<em>/<br />
while(length!=0) {<br />
CBTRACELN(&quot;Chungroesse : &quot;+length.getAsPointedNumber()+&quot; Bytes&quot;);<br />
do {<br />
/</em><br />
** Darauf achten, dass nicht mehr Daten empfangen<br />
** werden als Chunk groß ist<br />
*/<br />
if(length&gt;=bufsize)<br />
amount=m_iconn-&gt;receive(buf,10000);<br />
else<br />
amount=m_iconn-&gt;receive(buf,length.getAsUnsignedLong());</p>
<p>file.writeBlock(buf,amount);<br />
totallyRead+=static_cast&lt;unsigned long&gt;(amount);<br />
length-=static_cast&lt;unsigned long&gt;(amount);<br />
CBTRACE(&quot;Bisher uebertragen: &quot;+totallyRead.getAsPointedNumber()+&quot; Bytes\r&quot;);<br />
if((totallyRead==0)&amp;&amp;(length!=0)) {<br />
m_lastError=&quot;chunkedTransfer: Übertragung abgebrochen&quot;;<br />
CBTRACE(&quot;chunkedTransfer: Übertragung abgebrochen&quot;);<br />
return(false);<br />
}</p>
<p>} while(length!=0);</p>
<p>CBTRACELN(&quot;&quot;);<br />
/*<br />
** CRLF hinter Chunk-Datn einlesen<br />
<em>/<br />
m_iconn-&gt;receiveLine();<br />
/</em><br />
** Größe des nächsten Chunks einlesen<br />
*/<br />
length=hexToValue(m_iconn-&gt;receiveLine());<br />
}</p>
<p>CBTRACELN(&quot;\nErfolg!&quot;);<br />
return(true);<br />
}</p>
<p>}; // namespace Codebook</p>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
<p><strong>Fehler:</strong></p>
<p>&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::eq(const char &amp;,const char &amp;) in Zeile 19<br />
&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::eq(const char &amp;,const char &amp;) in Zeile 19<br />
&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::lt(const char &amp;,const char &amp;) in Zeile 23<br />
&quot;IString.h&quot;: E2268 Aufruf der undefinierten Funktion 'tolower' in Funktion insensitive_char_traits::lt(const char &amp;,const char &amp;) in Zeile 23<br />
&quot;CHttpRequest.h&quot;: E2361 'const' wurde bereits einbezogen in Zeile 16<br />
&quot;CHttpRequest.h&quot;: E2361 'const' wurde bereits einbezogen in Zeile 17<br />
&quot;CSpecificINetConn.h&quot;: E2209 include-Datei 'afxsock.h' kann nicht geöffnet werden in Zeile 6<br />
&quot;CSpecificINetConn.h&quot;: E2312 'runtime_error' ist keine eindeutige Basisklasse von 'internet_error' in Funktion internet_error::internet_error(const _STL::string &amp;) in Zeile 16<br />
&quot;CSpecificINetConn.h&quot;: E2251 Standardkonstruktor zum Initialisieren der Basisklasse '_STL::runtime_error' nicht gefunden in Funktion internet_error::internet_error(const _STL::string &amp;) in Zeile 17<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 22<br />
&quot;CSpecificINetConn.h&quot;: E2303 Typname erwartet in Zeile 23<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 23<br />
&quot;CSpecificINetConn.h&quot;: E2303 Typname erwartet in Zeile 24<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 24<br />
&quot;CSpecificINetConn.h&quot;: E2303 Typname erwartet in Zeile 25<br />
&quot;CSpecificINetConn.h&quot;: E2139 In Deklaration fehlt ; in Zeile 25<br />
&quot;CHttpConnection.cpp&quot;: W8057 Parameter 'response' wird nie verwendet. in Funktion CHttpConnection::chunkedFileTransfer(const string &amp;,const CHttpResponse &amp;) in Zeile 469<br />
*** 16 Fehler bei der Compilierung ***<br />
BCC32 beendet mit Fehler-Code: 1<br />
Erzeugen wegen Fehler abgebrochen</p>
<p><strong>Problematischer Header:</strong></p>
<p>//(IString.h)</p>
<p>#ifndef __ISTRING_H<br />
#define __ISTRING_H</p>
<p>#include &lt;iostream&gt;<br />
#include &lt;string&gt;</p>
<p>namespace Codebook {</p>
<p>struct insensitive_char_traits {<br />
typedef char char_type;<br />
typedef int int_type;</p>
<p>static void assign(char&amp; c1, const char&amp; c2) {<br />
c1 = c2;<br />
}</p>
<p>static bool eq(const char&amp; c1, const char&amp; c2) {<br />
return (tolower(c1) == tolower(c2));<br />
}</p>
<p>static bool lt(const char&amp; c1, const char&amp; c2) {<br />
return (tolower(c1) &lt; tolower(c2));<br />
}</p>
<p>static int compare(const char *s1, const char *s2, size_t len) {<br />
for (; 0 &lt; len; --len, ++s1, ++s2)<br />
if (!eq(*s1, *s2))<br />
return (lt(*s1, *s2) ? -1 : +1);<br />
return (0);<br />
}</p>
<p>static size_t length(const char *s) {<br />
size_t len;<br />
for (len = 0; !eq(*s, char()); ++s)<br />
++len;<br />
return (len);<br />
}</p>
<p>static char *copy(char *s1, const char *s2, size_t len) {<br />
char *ptr = s1;<br />
for (; 0 &lt; len; --len, ++ptr, ++s2)<br />
assign(*ptr, *s2);<br />
return (s1);<br />
}</p>
<p>static const char *find(const char *s, size_t len, const char&amp; c) {<br />
for (; 0 &lt; len; --len, ++s)<br />
if (eq(*s, c))<br />
return (s);<br />
return (0);<br />
}</p>
<p>static char *move(char *s1, const char *s2, size_t len) {<br />
char <em>ptr = s1;<br />
if (s2 &lt; ptr &amp;&amp; ptr &lt; s2 + len)<br />
for (ptr += len, s2 += len; 0 &lt; len; --len)<br />
assign(</em>--ptr, *--s2);<br />
else<br />
for (; 0 &lt; len; --len, ++ptr, ++s2)<br />
assign(*ptr, *s2);<br />
return (s1);<br />
}</p>
<p>static char *assign(char *s, size_t len, char c) {<br />
char *ptr = s;<br />
for (; 0 &lt; len; --len, ++ptr)<br />
assign(*ptr, c);<br />
return (s);<br />
}</p>
<p>static char to_char_type(const int_type&amp; i) {<br />
return (i);<br />
}</p>
<p>static int_type to_int_type(const char&amp; c) {<br />
return (c);<br />
}</p>
<p>static bool eq_int_type(const int_type&amp; c1, const int_type&amp; c2) {<br />
return (c1 == c2);<br />
}</p>
<p>static int_type eof() {<br />
return ((int_type)EOF);<br />
}</p>
<p>static int_type not_eof(const int_type&amp; i) {<br />
return (i != eof() ? i : !eof());<br />
}</p>
<p>};</p>
<p>typedef std::basic_string&lt;char, insensitive_char_traits, std::allocator&lt;char&gt; &gt;<br />
insensitive_string;</p>
<p>}; // ende namespace Codebook<br />
#endif</p>
<p><strong>Post:</strong></p>
<p>Der Code sollte eigentlich funktionieren, allerdings macht er mir über Windows/C++BuilderXPersonal faxen! Ich hab kp, warum da soviele unsinnige Fehler kommen?!</p>
<p>Wäre nett wenn sich jemand dem Problem annehmen könnte.</p>
<p>Ich bin eigentlich nicht so gut in C++, die Datei ist aus dem Buch: &quot;Das C++ Codebook&quot;! Ich will versuchen das Programm nachzuvollziehen, doch es wäre gut, wenn es erstmal fehlerfrei wäre!</p>
<p>Vielen Dank schonmal für die Hilfe,</p>
<p>mfg<br />
HaNoCr.</p>
<p>Ps:<br />
Kann mir mal einer sagen, wie man den Code, gleich übersichtlich übernehmen kann? So wie es jetzt ist, sieht es (ohne Tabs u. Farben) doch eher unübersichtlich aus.<br />
Wie macht ihr das ? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Ich mein, wenn ich den Artikel bearbeite, sind die Tabs ja wenigstens noch da, aber wenn man sich den Artikel dann fertig anguckt sind se weg ?!<br />
...<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f621.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--pouting_face"
      title=":rage:"
      alt="😡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1168329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1168329</guid><dc:creator><![CDATA[HaNoCr]]></dc:creator><pubDate>Sat, 04 Nov 2006 15:27:43 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerabhängiger Fehler bei :: CHttpConnection on Sat, 04 Nov 2006 15:31:30 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Wenn du willst, das deine Post wirklich gelesen werden, dann<br />
- benutzt die CPP-Codetags fürs Posten von Code<br />
- rück deinen Code vernünftig ein<br />
- kürze deinen Code auf das wesentliche</p>
<p>Nun zum Thema : Der Builder kennt CHttpConnection nicht. Das ist ein Teil der MFC, und die gibts nur beim Microsoft Visual Studio.<br />
Der Builder hat ähnliche Klassen, der Code aus dem Buch hilft dir dabei nicht viel.<br />
Also besorg dir entweder die MS-IDE (gibt eine kostenlose Version), oder arbeite mit dem Builder wie es der Builder erwartet. In jedemfall aber gewöhn dir an, sowas ins richtige Subforum zu schreiben.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1168332</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1168332</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 04 Nov 2006 15:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerabhängiger Fehler bei :: CHttpConnection on Sat, 04 Nov 2006 15:40:55 GMT]]></title><description><![CDATA[<p>Jop!<br />
Mach ich in Zukunft.</p>
<p>Wie rücke ich den vernümftig ein bzw. Kopiere ihn komplett mit farben und tabs ?<br />
Entschuldige, aber was ist hier den mom das wesentliche ? Die problematik erstrekt sich über gesammten Code, oder nicht ?</p>
<p>mfg<br />
HaNoCr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1168336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1168336</guid><dc:creator><![CDATA[HaNoCr]]></dc:creator><pubDate>Sat, 04 Nov 2006 15:40:55 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerabhängiger Fehler bei :: CHttpConnection on Sat, 04 Nov 2006 15:48:28 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Den CPP-tags findest du beim Schreiben deines Posts genau unter den Smilies. Du schreibst deinen Code wie gewohnt, markierst den Bereich und klickst auf den <em>C/C++</em> Button. Das einrücken der einzelnen Codeblöcke must du aber selber auch machen, wie du es auch im Codeeditor machen würdest/solltest.</p>
<p>Das wesentliche wäre die Stelle gewesen, wo der Compiler mit der ersten Fehlermeldung (also die auf die sich auch dein Threadtitel bezieht) stehenbleibt.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1168339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1168339</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Sat, 04 Nov 2006 15:48:28 GMT</pubDate></item><item><title><![CDATA[Reply to Compilerabhängiger Fehler bei :: CHttpConnection on Sat, 04 Nov 2006 16:14:01 GMT]]></title><description><![CDATA[<p>Vielen Dank!</p>
<p>mfg<br />
HaNoCr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1168356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1168356</guid><dc:creator><![CDATA[HaNoCr]]></dc:creator><pubDate>Sat, 04 Nov 2006 16:14:01 GMT</pubDate></item></channel></rss>