<?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[Problem mit std::map]]></title><description><![CDATA[<p>Hallo.</p>
<p>Mein Programm besteht aus 3 Dateien. Zum Problem komme ich am Ende. ^^</p>
<p>Main.cpp</p>
<pre><code class="language-cpp">case WM_INITDIALOG:
{

        CAccountProfile* pAccounts	= new CAccountProfile

         if(!pAccounts-&gt;LoadAccounts(szAccountPath, hWnd) )
	 {
		 ::MessageBox(NULL, (&quot;Failed to load Accounts!&quot;), (&quot;OnLoad&quot;), NULL);
		 PostQuitMessage(0);
	 }

        break;
}
// ...
case CBN_SELCHANGE:
{
        pAccounts-&gt;UpdateAccount(hWnd); // soll die gui updaten
        break;

}
</code></pre>
<p>Gleich sind wir beim problem angekommen. <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25159">@_</a>@</p>
<p>Profile.h</p>
<pre><code class="language-cpp">// ....

class CAccountProfile
{
public:

typedef struct _ACCOUNT_INFO
{
	char AccLogin[128];
	char AccPassword[128];
	char AccServer[128];
	char AccSlot[128];

} ACCOUNT_INFO;

public:

	CAccountProfile(
		void
		);

	virtual
	~CAccountProfile(
		void
		);

	bool LoadAccounts(
		const char* pAccountPath,
		HWND hWnd);

	void UpdateAccount(HWND 
		hWnd);

	bool Deinitialize(
		void
		);

private:

	std::map&lt;
		std::string, ACCOUNT_INFO*&gt; accountData;

// ..
</code></pre>
<p>Ahh! Endlich beim problem angekommen.</p>
<p>Profile.cpp</p>
<pre><code class="language-cpp">bool CAccountProfile::LoadAccounts(const char *pAccountPath, HWND hWnd)
{
     ACCOUNT_INFO* pAccInfo = new ACCOUNT_INFO;
    // durch Textdatei durchwühlen und dann zur Map hinzufügen.
    this-&gt;accountData.insert ( std :: make_pair( accRemark, pAccInfo  ) );
    return true;
}
void CAccountProfile::UpdateAccount(HWND hWnd)
{
                          LRESULT changed;
                          std::string chan;

			  changed = SendMessage(GetDlgItem(hWnd, cmbAccProfile), CB_GETCURSEL, 0, 0);

			  char tmp[128] = {0};
		          SendMessage(GetDlgItem(hWnd, cmbAccProfile), CB_GETLBTEXT, changed, (LPARAM)tmp);
			  chan = tmp;
                          std::map&lt;std::string, ACCOUNT_INFO*&gt;::iterator itr = this-&gt;accountData.begin();

                          while(itr != this-&gt;accountData.end()) // hier kratzt er immer ab.
                          {
                               itr++;
                          }		
}
</code></pre>
<p>Das problem ist, dass es Immer abstürzt sobald UpdateAccount ausgeführt wird, bzw der while loop. Auch wenn sich garnichts in der Map befindet passiert es, bin für jede ratschläge offen.</p>
<p>Grüße <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/229731/problem-mit-std-map</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 14:57:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/229731.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Dec 2008 23:34:50 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit std::map on Mon, 15 Dec 2008 23:34:50 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Mein Programm besteht aus 3 Dateien. Zum Problem komme ich am Ende. ^^</p>
<p>Main.cpp</p>
<pre><code class="language-cpp">case WM_INITDIALOG:
{

        CAccountProfile* pAccounts	= new CAccountProfile

         if(!pAccounts-&gt;LoadAccounts(szAccountPath, hWnd) )
	 {
		 ::MessageBox(NULL, (&quot;Failed to load Accounts!&quot;), (&quot;OnLoad&quot;), NULL);
		 PostQuitMessage(0);
	 }

        break;
}
// ...
case CBN_SELCHANGE:
{
        pAccounts-&gt;UpdateAccount(hWnd); // soll die gui updaten
        break;

}
</code></pre>
<p>Gleich sind wir beim problem angekommen. <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25159">@_</a>@</p>
<p>Profile.h</p>
<pre><code class="language-cpp">// ....

class CAccountProfile
{
public:

typedef struct _ACCOUNT_INFO
{
	char AccLogin[128];
	char AccPassword[128];
	char AccServer[128];
	char AccSlot[128];

} ACCOUNT_INFO;

public:

	CAccountProfile(
		void
		);

	virtual
	~CAccountProfile(
		void
		);

	bool LoadAccounts(
		const char* pAccountPath,
		HWND hWnd);

	void UpdateAccount(HWND 
		hWnd);

	bool Deinitialize(
		void
		);

private:

	std::map&lt;
		std::string, ACCOUNT_INFO*&gt; accountData;

// ..
</code></pre>
<p>Ahh! Endlich beim problem angekommen.</p>
<p>Profile.cpp</p>
<pre><code class="language-cpp">bool CAccountProfile::LoadAccounts(const char *pAccountPath, HWND hWnd)
{
     ACCOUNT_INFO* pAccInfo = new ACCOUNT_INFO;
    // durch Textdatei durchwühlen und dann zur Map hinzufügen.
    this-&gt;accountData.insert ( std :: make_pair( accRemark, pAccInfo  ) );
    return true;
}
void CAccountProfile::UpdateAccount(HWND hWnd)
{
                          LRESULT changed;
                          std::string chan;

			  changed = SendMessage(GetDlgItem(hWnd, cmbAccProfile), CB_GETCURSEL, 0, 0);

			  char tmp[128] = {0};
		          SendMessage(GetDlgItem(hWnd, cmbAccProfile), CB_GETLBTEXT, changed, (LPARAM)tmp);
			  chan = tmp;
                          std::map&lt;std::string, ACCOUNT_INFO*&gt;::iterator itr = this-&gt;accountData.begin();

                          while(itr != this-&gt;accountData.end()) // hier kratzt er immer ab.
                          {
                               itr++;
                          }		
}
</code></pre>
<p>Das problem ist, dass es Immer abstürzt sobald UpdateAccount ausgeführt wird, bzw der while loop. Auch wenn sich garnichts in der Map befindet passiert es, bin für jede ratschläge offen.</p>
<p>Grüße <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631036</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631036</guid><dc:creator><![CDATA[bier]]></dc:creator><pubDate>Mon, 15 Dec 2008 23:34:50 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Mon, 15 Dec 2008 23:48:29 GMT]]></title><description><![CDATA[<p>An der iterierenden Schleife kann ich auf Anhieb keinen Fehler erkennen und an dem unformatierten restlichen Code habe ich kaum Interesse.<br />
Hast du mal den Debugger zu der Angelegenheit befragt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631038</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631038</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 15 Dec 2008 23:48:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Mon, 15 Dec 2008 23:51:13 GMT]]></title><description><![CDATA[<p>Srry. Wusste nicht das man hier den &quot;Nachrichtentext&quot; größer machen kann, daher so unordentlich. Nein habe ich noch nicht, aber kann ich später oder morgen mal machen, danke dennoch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631040</guid><dc:creator><![CDATA[bier]]></dc:creator><pubDate>Mon, 15 Dec 2008 23:51:13 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Tue, 16 Dec 2008 10:05:57 GMT]]></title><description><![CDATA[<p>das hier wird dein problem zwar nicht beheben aber vll wird dein quelltext damit ein wenig übersichtlicher:</p>
<p>bier schrieb:</p>
<blockquote>
<p>Main.cpp</p>
<pre><code class="language-cpp">case WM_INITDIALOG:
{
      CAccountProfile* pAccounts	= new CAccountProfile
      if (! pAccounts-&gt;LoadAccounts(szAccountPath, hWnd))
      { //richtig eingerückt
            ::MessageBox (NULL, &quot;Failed to load Accounts!&quot;, &quot;OnLoad&quot;, NULL); //überflüssige Klammern gelöscht
            PostQuitMessage(0);
      }

      break;
}
// ...
case CBN_SELCHANGE:
{
      pAccounts-&gt;UpdateAccount (hWnd); // soll die gui updaten
      break;
}
</code></pre>
<p>Profile.h</p>
<pre><code class="language-cpp">/* .... */

class CAccountProfile
{
public:

struct ACCOUNT_INFO
{
	char AccLogin[128];
	char AccPassword[128];
	char AccServer[128];
	char AccSlot[128];
}; //typedef struct ist unnötig - aber warum nimmst du kein std::string ?
//mit std::string::c_str() bekommste genau so gut nen const char* und die restlichen Operationen (zeichenketten verknüpfen etc) sind viel einfacher zu handhaben
//und wahrscheinlich (was aber keine rolle spielt) auch performanter als das char gefrickel

	CAccountProfile (); //void in der parameterliste zu schreiben ist in C++ eher unüblich - wird vielerorts auch als schlechter Stil angesehen

	virtual ~CAccountProfile ();

	bool LoadAccounts (char* pAccountPath, HWND hWnd); //hWnd halte ich auch für keinen guten variablen-name
//char* pAccountPath sollte ein std::string &amp;AccountPath werden (falls du das const vor char vergessen hast, solltes du die Referenz auch const machen)

	void UpdateAccount (HWND hWnd); //immernoch komischer name

	bool Deinitialize (); //würde wahrscheinlich eher ein void Deinitialize nehmen und wenn was schief geht ne exception werfen
//aber ohne die genauen Aufgaben und möglichen Fehler zu kennen ist das schwer zu beurteilen

private:
        typedef std::map&lt;std::string, ACCOUNT_INFO*&gt; TaccountData; //ein typedef ermöglicht dir dann einfacher an den iterator/... der klasse zu kommen
        TaccountData accountData;
</code></pre>
<p>Profile.cpp</p>
<pre><code class="language-cpp">bool CAccountProfile::LoadAccounts(const char *pAccountPath, HWND hWnd)
{
    ACCOUNT_INFO* AccToAdd = new ACCOUNT_INFO; //besserer var-name!?

    /* durch Textdatei durchwühlen und dann zur Map hinzufügen. */

    accountData.insert ( std::make_pair (accRemark, AccToAdd) ); //this brauchst du hier nicht
    return true; //warum dann überhaupt nen Rückgabewert? sieht auch wieder stark nach exception aus...
}
void CAccountProfile::UpdateAccount(HWND hWnd)
{
    const LRESULT changed = SendMessage (GetDlgItem(hWnd, cmbAccProfile), CB_GETCURSEL, 0, 0);

    char tmp[128] = {0};
    SendMessage(GetDlgItem(hWnd, cmbAccProfile), CB_GETLBTEXT, changed, (LPARAM)tmp);

    const std::string chan = tmp; //variablen sollten immer erst dort deklariert werden, wo sie gebraucht werden (und können damit auch meist direkt richtig initialisiert werden
    TaccountData::iterator iter = accountData.begin(); //unserem typedef sei dank sieht das ganze auch schon fast leserlich aus

//und wir machen aus dem while nen for - iter und end habe ich der übersichtlichkeit halber mal getrennt voneinander definiert und nicht im schleifenkopf - vll brauchst du ja auch zumindest eins von beiden noch nach der Schleife 
//(außerdem sieht das ja stark so aus, als ob accountData.find() genau das ist, was du suchst ^^
    const TaccountData::iterator end = accountData.end();
    for(/*deklarationen+definitionen sind schon alle fertig*/; iter != end; ++iter)
       {
           //was auch immer hier hin sollte
       }
}
</code></pre>
</blockquote>
<p>Vll hilft es dir ja ein wenig mehr durchzusehen und damit erst mal die wichtigste Vorraussetzungen zu erfüllen, das ganze mit dem Debugger durchgehen zu können</p>
<p>Noch was grundsätzliches zum Design:<br />
Ich glaube nicht, dass ACCOUNT_INFO ein toller klasen (bzw. struct)-Name ist und ich würde auch mal stark anzweifeln, dass er Design-technisch gesehen in die Verwaltungs-Klasse rein sollte...</p>
<p><div class="plugin-markdown"><input type="checkbox" id="checkbox28793" checked="true" /><label for="checkbox28793">nen std::string nimmst, dann brauchst dir auch keine Sorgen brauchen machen, dass es evtl den Stack sprengen würde - da eine Instanz der Klasse dann vll 16Byte brauchen wird (wehe jz kommt wieder jmd an und sagt, dass es bei ihm doch nur 8 sind oder doch 32 und es nirgendwo im standard steht, wie groß ein std::string ist - ich wollte damit ja nur anmerken, dass es jedenfalls wenig Daten auf dem Stack sind - wahrscheinlich nur die Grlße und nen Pointer) )</label></div></p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631119</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Tue, 16 Dec 2008 10:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Tue, 16 Dec 2008 10:29:34 GMT]]></title><description><![CDATA[<p>in der Funktion LoadAccount: wo kommt accRemark her?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631136</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631136</guid><dc:creator><![CDATA[schokomann]]></dc:creator><pubDate>Tue, 16 Dec 2008 10:29:34 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Tue, 16 Dec 2008 12:50:24 GMT]]></title><description><![CDATA[<p>Sorry Boyz, hat sich erledigt, habe mir Bier gekauft. Klappt auch viel besser jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631219</guid><dc:creator><![CDATA[bier]]></dc:creator><pubDate>Tue, 16 Dec 2008 12:50:24 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Tue, 16 Dec 2008 13:30:41 GMT]]></title><description><![CDATA[<p>Wir brauchen nen Ugly- Smilie <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631242</guid><dc:creator><![CDATA[Everest]]></dc:creator><pubDate>Tue, 16 Dec 2008 13:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit std::map on Tue, 16 Dec 2008 19:54:42 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/16305">@unskilled</a></p>
<p>Danke. Man lernt nie aus.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21010">@bier</a></p>
<p>Ha! Wie lustig, nicht ich.</p>
<p>@Everest</p>
<p>Wie schon oben erwähnt, wusste ich nicht das man den &quot;Nachrichtentext&quot; größer machen kann, daher sieht es auch so aus. Lesen bevor man irgendwas zum Thema schreibt schadet bekanntlich nie.</p>
<p>Nun. Habs mit hilfe von unskilled's post geschafft, danke. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1631486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1631486</guid><dc:creator><![CDATA[bier]]></dc:creator><pubDate>Tue, 16 Dec 2008 19:54:42 GMT</pubDate></item></channel></rss>