<?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[Frage zu meiner Config Klasse]]></title><description><![CDATA[<p>Hallo,<br />
Ich würde mal gerne wissen, ob ich das so lassen kann oder ob ich da noch irgendetwas ändern sollte, bei mir funktioniert alles einwandfrei, aber kann ja sein dass später Fehler auftreten könnten...</p>
<p>Gleich zu beginn, ich habe mit Absicht meine eigene Behandlung des Dynamischen Arrays gebaut, um das zu verstehen, wie es intern in etwa aufgebaut sein könnte (bei vectoren)</p>
<p>Hier mal der Source:</p>
<p>mystring.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;sstream&gt;
#include &lt;stdarg.h&gt;

#ifndef MYSTRING
#define MYSTRING 1
using namespace std;

class myString{
    string value;
    public:
        myString&amp; operator=(string v1);

        int toInt();
        float toFloat();
        double toDouble();
        string toString();
};
#endif
class myString;
</code></pre>
<p>mystring.cpp</p>
<pre><code class="language-cpp">#include &quot;mystring.h&quot;

int myString::toInt()
{
    stringstream ssStream(this-&gt;value);
    int iReturn;
    ssStream &gt;&gt; iReturn;

    return iReturn;
}

float myString::toFloat()
{
    stringstream ssStream(this-&gt;value);
    float fReturn;
    ssStream &gt;&gt; fReturn;

    return fReturn;
}

double myString::toDouble()
{
    stringstream ssStream(this-&gt;value);
    double dReturn;
    ssStream &gt;&gt; dReturn;

    return dReturn;
}

string myString::toString()
{
    return this-&gt;value;
}

myString&amp; myString::operator=(string v1){
    this-&gt;value = v1;
    return *this;
};
</code></pre>
<p>config.h</p>
<pre><code class="language-cpp">#include &quot;mystring.h&quot;

#ifndef MYCONFIG
#define MYCONFIG 1
enum MyConfigTypes{
    READ_ONLY,
    READ_WRITE
};

struct MyConfigStructure{
    myString Value;
    string ConfigName;
    MyConfigTypes Type;
};
class Config{
    public:
        void AddDefaultConfigVar(string,string,MyConfigTypes);
        void SetConfigVar(string,string);
        myString GetConfigVar(string);

        int GetSize();

        Config();
        ~Config();

        void LoadConfig(string);
        void SaveConfig(string);

        void SetDebug(bool);
    private:
        void __Debug(string, ...);

        void __AddArrayElement();
        void __DeleteArrayElement(int);

        MyConfigStructure* ConfigArray;
        int CurrArraySize;
        bool IsDebugEnabled;

};

extern Config ConfigHandle;
#endif
class Config;
</code></pre>
<p>config.cpp</p>
<pre><code class="language-cpp">#include &quot;config.h&quot;

Config ConfigHandle;

void Config::__Debug(string DebugMessage, ...){
    if(this-&gt;IsDebugEnabled == true){
        va_list argzeiger;
        va_start(argzeiger,DebugMessage);

        DebugMessage = &quot;ConfigDebug: &quot; + DebugMessage;

        vprintf(DebugMessage.c_str(),argzeiger);
        va_end(argzeiger);
    }
}

int Config::GetSize(){
    return this-&gt;CurrArraySize;
}

void Config::__AddArrayElement(){
    MyConfigStructure* TempArray;
    TempArray = new MyConfigStructure[(this-&gt;CurrArraySize+1)];

    for(int i = 0; i &lt; this-&gt;CurrArraySize; i++)
        TempArray[i] = this-&gt;ConfigArray[i];

    this-&gt;ConfigArray = TempArray;
    this-&gt;CurrArraySize++;

    this-&gt;__Debug(&quot;__AddArrayElement: Element erfolgreich hinzugefügt...\n&quot;);
}

void Config::__DeleteArrayElement(int DelID){
    MyConfigStructure* TempArray;
    TempArray = new MyConfigStructure[(this-&gt;CurrArraySize-1)];

    int MinusCount = 0;
    for(int i = 0; i &lt; this-&gt;CurrArraySize; i++){
        if(i == DelID){
            MinusCount = 1;
        }else{
            if(MinusCount == 0)
                TempArray[i] = this-&gt;ConfigArray[i];
            else
                TempArray[i-1] = this-&gt;ConfigArray[i];
        }
    }

    this-&gt;ConfigArray = TempArray;
    this-&gt;CurrArraySize--;
}

void Config::SetConfigVar(string VarName, string VarValue){
    this-&gt;__Debug(&quot;SetConfigVar: Start.\n&quot;);
    for(int i = 0; i&lt;this-&gt;CurrArraySize; i++){
        if(this-&gt;ConfigArray[i].ConfigName == VarName){
            if(this-&gt;ConfigArray[i].Type != READ_ONLY){
                this-&gt;ConfigArray[i].Value = VarValue;
            }else{
                this-&gt;__Debug(&quot;Warnung: ConfigValue[%s] ist schreibgeschuetzt.\n\n&quot;,VarName.c_str());
            }
            break;
        }else{
            if(this-&gt;ConfigArray[i].ConfigName == &quot;&quot;)
            {
                this-&gt;ConfigArray[i].ConfigName = VarName;
                this-&gt;ConfigArray[i].Value = VarValue;
                this-&gt;ConfigArray[i].Type = READ_WRITE;
                this-&gt;__Debug(&quot;SetConfigVar: Setze vorhandene Array Value auf neuen Wert.\n&quot;);
                break;
            }
        }
        if(i == this-&gt;CurrArraySize-1){
            this-&gt;__Debug(&quot;SetConfigVar: Fordere mehr Elemente an.\n&quot;);
            this-&gt;__AddArrayElement();
            this-&gt;SetConfigVar(VarName, VarValue);
            break;
        }
    }
};

void Config::AddDefaultConfigVar(string VarName,string VarValue,MyConfigTypes Type){
    for(int i = 0; i&lt;this-&gt;CurrArraySize; i++){
        if(this-&gt;ConfigArray[i].ConfigName == VarName){
            this-&gt;ConfigArray[i].Value = VarValue;
            this-&gt;ConfigArray[i].Type = Type;
            break;
        }else{
            if(this-&gt;ConfigArray[i].ConfigName == &quot;&quot;)
            {
                this-&gt;ConfigArray[i].ConfigName = VarName;
                this-&gt;ConfigArray[i].Value = VarValue;
                this-&gt;ConfigArray[i].Type = Type;
                break;
            }
        }
        if(i == this-&gt;CurrArraySize-1){
            this-&gt;__Debug(&quot;SetConfigVar: Fordere mehr Elemente an.\n&quot;);
            this-&gt;__AddArrayElement();
            this-&gt;SetConfigVar(VarName, VarValue);
            break;
        }
    }
};

myString Config::GetConfigVar(string VarName){
    myString ReturnVar;
    ReturnVar = &quot;&quot;;
    for(int i = 0; i&lt;this-&gt;CurrArraySize; i++){
        if(this-&gt;ConfigArray[i].ConfigName == VarName){
            ReturnVar = this-&gt;ConfigArray[i].Value;
            this-&gt;__Debug(&quot;GetConfigVar: Returne passenden Eintrag.\n&quot;);
            break;
        }
    }

    return ReturnVar;
};

void Config::SetDebug(bool State){
    this-&gt;IsDebugEnabled = State;
}

void Config::LoadConfig(string FileName){
    FILE * pFile;

    char Name[255];
    char Value[255];

    pFile = fopen (FileName.c_str(),&quot;r&quot;);

    if(pFile){
        while (!feof(pFile)) {
            fscanf (pFile, &quot;%s = %s\n&quot;, Name, Value);
            this-&gt;SetConfigVar(Name,Value);
        }
        fclose (pFile);
    }else{
        this-&gt;__Debug(&quot;%s konnte nicht geöffnet werden.\n\n&quot;, FileName.c_str());
    }
}
void Config::SaveConfig(string FileName){
    FILE * pFile;

    pFile = fopen (FileName.c_str(),&quot;w+&quot;);
    if(pFile){
        for (int i=0 ; i&lt;this-&gt;CurrArraySize ; i++)
        {
            if(this-&gt;ConfigArray[i].ConfigName != &quot;&quot;){
                if(this-&gt;ConfigArray[i].Type != READ_ONLY){
                    fprintf (pFile, &quot;%s = %s\n&quot;,this-&gt;ConfigArray[i].ConfigName.c_str(),this-&gt;ConfigArray[i].Value.toString().c_str());
                }
            }else{
                break;
            }
        }
        fclose (pFile);
    }else{
        this-&gt;__Debug(&quot;%s konnte nicht geöffnet werden.\n\n&quot;, FileName.c_str());
    }
}

Config::Config(){
    this-&gt;CurrArraySize = 1;
    this-&gt;ConfigArray = new MyConfigStructure[1];
    this-&gt;IsDebugEnabled = false;
}

Config::~Config(){
    delete this-&gt;ConfigArray;
}
</code></pre>
<p>Wie gesagt, wäre schon wenn mir Fehler aufgezeigt werden könnten, ich nehme auch Lob entgegen, wobei ich kaum denke, dass man das Loben kann... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/186559/frage-zu-meiner-config-klasse</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 05:05:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/186559.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 10 Jul 2007 09:18:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:18:06 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Ich würde mal gerne wissen, ob ich das so lassen kann oder ob ich da noch irgendetwas ändern sollte, bei mir funktioniert alles einwandfrei, aber kann ja sein dass später Fehler auftreten könnten...</p>
<p>Gleich zu beginn, ich habe mit Absicht meine eigene Behandlung des Dynamischen Arrays gebaut, um das zu verstehen, wie es intern in etwa aufgebaut sein könnte (bei vectoren)</p>
<p>Hier mal der Source:</p>
<p>mystring.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;cstring&gt;
#include &lt;sstream&gt;
#include &lt;stdarg.h&gt;

#ifndef MYSTRING
#define MYSTRING 1
using namespace std;

class myString{
    string value;
    public:
        myString&amp; operator=(string v1);

        int toInt();
        float toFloat();
        double toDouble();
        string toString();
};
#endif
class myString;
</code></pre>
<p>mystring.cpp</p>
<pre><code class="language-cpp">#include &quot;mystring.h&quot;

int myString::toInt()
{
    stringstream ssStream(this-&gt;value);
    int iReturn;
    ssStream &gt;&gt; iReturn;

    return iReturn;
}

float myString::toFloat()
{
    stringstream ssStream(this-&gt;value);
    float fReturn;
    ssStream &gt;&gt; fReturn;

    return fReturn;
}

double myString::toDouble()
{
    stringstream ssStream(this-&gt;value);
    double dReturn;
    ssStream &gt;&gt; dReturn;

    return dReturn;
}

string myString::toString()
{
    return this-&gt;value;
}

myString&amp; myString::operator=(string v1){
    this-&gt;value = v1;
    return *this;
};
</code></pre>
<p>config.h</p>
<pre><code class="language-cpp">#include &quot;mystring.h&quot;

#ifndef MYCONFIG
#define MYCONFIG 1
enum MyConfigTypes{
    READ_ONLY,
    READ_WRITE
};

struct MyConfigStructure{
    myString Value;
    string ConfigName;
    MyConfigTypes Type;
};
class Config{
    public:
        void AddDefaultConfigVar(string,string,MyConfigTypes);
        void SetConfigVar(string,string);
        myString GetConfigVar(string);

        int GetSize();

        Config();
        ~Config();

        void LoadConfig(string);
        void SaveConfig(string);

        void SetDebug(bool);
    private:
        void __Debug(string, ...);

        void __AddArrayElement();
        void __DeleteArrayElement(int);

        MyConfigStructure* ConfigArray;
        int CurrArraySize;
        bool IsDebugEnabled;

};

extern Config ConfigHandle;
#endif
class Config;
</code></pre>
<p>config.cpp</p>
<pre><code class="language-cpp">#include &quot;config.h&quot;

Config ConfigHandle;

void Config::__Debug(string DebugMessage, ...){
    if(this-&gt;IsDebugEnabled == true){
        va_list argzeiger;
        va_start(argzeiger,DebugMessage);

        DebugMessage = &quot;ConfigDebug: &quot; + DebugMessage;

        vprintf(DebugMessage.c_str(),argzeiger);
        va_end(argzeiger);
    }
}

int Config::GetSize(){
    return this-&gt;CurrArraySize;
}

void Config::__AddArrayElement(){
    MyConfigStructure* TempArray;
    TempArray = new MyConfigStructure[(this-&gt;CurrArraySize+1)];

    for(int i = 0; i &lt; this-&gt;CurrArraySize; i++)
        TempArray[i] = this-&gt;ConfigArray[i];

    this-&gt;ConfigArray = TempArray;
    this-&gt;CurrArraySize++;

    this-&gt;__Debug(&quot;__AddArrayElement: Element erfolgreich hinzugefügt...\n&quot;);
}

void Config::__DeleteArrayElement(int DelID){
    MyConfigStructure* TempArray;
    TempArray = new MyConfigStructure[(this-&gt;CurrArraySize-1)];

    int MinusCount = 0;
    for(int i = 0; i &lt; this-&gt;CurrArraySize; i++){
        if(i == DelID){
            MinusCount = 1;
        }else{
            if(MinusCount == 0)
                TempArray[i] = this-&gt;ConfigArray[i];
            else
                TempArray[i-1] = this-&gt;ConfigArray[i];
        }
    }

    this-&gt;ConfigArray = TempArray;
    this-&gt;CurrArraySize--;
}

void Config::SetConfigVar(string VarName, string VarValue){
    this-&gt;__Debug(&quot;SetConfigVar: Start.\n&quot;);
    for(int i = 0; i&lt;this-&gt;CurrArraySize; i++){
        if(this-&gt;ConfigArray[i].ConfigName == VarName){
            if(this-&gt;ConfigArray[i].Type != READ_ONLY){
                this-&gt;ConfigArray[i].Value = VarValue;
            }else{
                this-&gt;__Debug(&quot;Warnung: ConfigValue[%s] ist schreibgeschuetzt.\n\n&quot;,VarName.c_str());
            }
            break;
        }else{
            if(this-&gt;ConfigArray[i].ConfigName == &quot;&quot;)
            {
                this-&gt;ConfigArray[i].ConfigName = VarName;
                this-&gt;ConfigArray[i].Value = VarValue;
                this-&gt;ConfigArray[i].Type = READ_WRITE;
                this-&gt;__Debug(&quot;SetConfigVar: Setze vorhandene Array Value auf neuen Wert.\n&quot;);
                break;
            }
        }
        if(i == this-&gt;CurrArraySize-1){
            this-&gt;__Debug(&quot;SetConfigVar: Fordere mehr Elemente an.\n&quot;);
            this-&gt;__AddArrayElement();
            this-&gt;SetConfigVar(VarName, VarValue);
            break;
        }
    }
};

void Config::AddDefaultConfigVar(string VarName,string VarValue,MyConfigTypes Type){
    for(int i = 0; i&lt;this-&gt;CurrArraySize; i++){
        if(this-&gt;ConfigArray[i].ConfigName == VarName){
            this-&gt;ConfigArray[i].Value = VarValue;
            this-&gt;ConfigArray[i].Type = Type;
            break;
        }else{
            if(this-&gt;ConfigArray[i].ConfigName == &quot;&quot;)
            {
                this-&gt;ConfigArray[i].ConfigName = VarName;
                this-&gt;ConfigArray[i].Value = VarValue;
                this-&gt;ConfigArray[i].Type = Type;
                break;
            }
        }
        if(i == this-&gt;CurrArraySize-1){
            this-&gt;__Debug(&quot;SetConfigVar: Fordere mehr Elemente an.\n&quot;);
            this-&gt;__AddArrayElement();
            this-&gt;SetConfigVar(VarName, VarValue);
            break;
        }
    }
};

myString Config::GetConfigVar(string VarName){
    myString ReturnVar;
    ReturnVar = &quot;&quot;;
    for(int i = 0; i&lt;this-&gt;CurrArraySize; i++){
        if(this-&gt;ConfigArray[i].ConfigName == VarName){
            ReturnVar = this-&gt;ConfigArray[i].Value;
            this-&gt;__Debug(&quot;GetConfigVar: Returne passenden Eintrag.\n&quot;);
            break;
        }
    }

    return ReturnVar;
};

void Config::SetDebug(bool State){
    this-&gt;IsDebugEnabled = State;
}

void Config::LoadConfig(string FileName){
    FILE * pFile;

    char Name[255];
    char Value[255];

    pFile = fopen (FileName.c_str(),&quot;r&quot;);

    if(pFile){
        while (!feof(pFile)) {
            fscanf (pFile, &quot;%s = %s\n&quot;, Name, Value);
            this-&gt;SetConfigVar(Name,Value);
        }
        fclose (pFile);
    }else{
        this-&gt;__Debug(&quot;%s konnte nicht geöffnet werden.\n\n&quot;, FileName.c_str());
    }
}
void Config::SaveConfig(string FileName){
    FILE * pFile;

    pFile = fopen (FileName.c_str(),&quot;w+&quot;);
    if(pFile){
        for (int i=0 ; i&lt;this-&gt;CurrArraySize ; i++)
        {
            if(this-&gt;ConfigArray[i].ConfigName != &quot;&quot;){
                if(this-&gt;ConfigArray[i].Type != READ_ONLY){
                    fprintf (pFile, &quot;%s = %s\n&quot;,this-&gt;ConfigArray[i].ConfigName.c_str(),this-&gt;ConfigArray[i].Value.toString().c_str());
                }
            }else{
                break;
            }
        }
        fclose (pFile);
    }else{
        this-&gt;__Debug(&quot;%s konnte nicht geöffnet werden.\n\n&quot;, FileName.c_str());
    }
}

Config::Config(){
    this-&gt;CurrArraySize = 1;
    this-&gt;ConfigArray = new MyConfigStructure[1];
    this-&gt;IsDebugEnabled = false;
}

Config::~Config(){
    delete this-&gt;ConfigArray;
}
</code></pre>
<p>Wie gesagt, wäre schon wenn mir Fehler aufgezeigt werden könnten, ich nehme auch Lob entgegen, wobei ich kaum denke, dass man das Loben kann... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322087</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:18:06 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:20:34 GMT]]></title><description><![CDATA[<p>ich würd die ganzen &quot;this-&gt;&quot; weglassen, und nur da verwenden wo es nötig ist!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322092</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322092</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:20:34 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:23:42 GMT]]></title><description><![CDATA[<p>Wann ist es denn überhaupt zwingend notwendig??<br />
Ich komme aus PHP und da ist $this, notwendig, von daher isses mehr eine Gewohnheit als alles andere <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322097</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:23:42 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:33:19 GMT]]></title><description><![CDATA[<p>this ist nur notwendig, wenn es Namenskonflikte zwischen Klassenmembern und lokalen Variablen geben kann (oder um das Objekt als Ganzes zu packen).</p>
<p>Ansonsten: Die Speicherverwaltung solltest du lieber den Profis überlassen - std::vector&lt;&gt; (in deinem Fall würde ich sogar eine std::map&lt;&gt; empfehlen) ist da wesentlich besser optimiert als dein Lösungsansatz. Und anstelle der FILE*-Dateiverarbeitung würde ich dir zu IOStreams raten.</p>
<p>PS: Und Namen mit __ am Anfang solltest du besser nicht verwenden - die sind reserviert für die Nutzung durch den Compiler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322104</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:33:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:39:30 GMT]]></title><description><![CDATA[<p>Bei Vector hatte ich aber leider das Problem, dass wenn ich:</p>
<pre><code class="language-cpp">vector&lt;MyConfigStructure&gt; ConfigArray;
</code></pre>
<p>geschrieben habe, der mit nen NoType Fehler rausgehaun hat... (Ich meine iss ja auch klar, iss ja ne Structure und kein Type)</p>
<p>Das mit dem this, merk ich mir und änders auch noch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Und __ Finde ich einfach Praktisch um Funktionen, für mich verständlich, als Verwaltungsfunktionen zu deklarieren, also diese Funktionen aber eine Grundlegende Bedeutung in der Klasse und sind meistens für Verwaltung oder Debuggen zuständig... das man es nicht machen sollte ist mir bewusst... ich werd die __ einfach nach dem Namen der Funktion setzen und schon gehts auch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322111</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322111</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:39:30 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:48:19 GMT]]></title><description><![CDATA[<p>Blackskyliner schrieb:</p>
<blockquote>
<p>Bei Vector hatte ich aber leider das Problem, dass wenn ich:</p>
<pre><code class="language-cpp">vector&lt;MyConfigStructure&gt; ConfigArray;
</code></pre>
<p>geschrieben habe, der mit nen NoType Fehler rausgehaun hat... (Ich meine iss ja auch klar, iss ja ne Structure und kein Type)</p>
</blockquote>
<p>Auch eine struct ist ein Typ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> Also was genau war die Meldung, die du bekommen hast? (und wie sah der zugehörige Code aus?)</p>
<p>PS: Was die Namen mit Unterstrichen angeht: Nicht alle derartigen Namen werden tatsächlich benutzt. Aber ein Compilerhersteller kann sich jederzeit entscheiden, einen dieser Namen zu verwenden - und wenn z.B. in der nächsten Version deines Compilers ein <code>#define __Debug</code> auftaucht, fliegt dir dein Programm um die Ohren.</p>
<p>PPS: Was für einen Sinn sollen denn die Forward-Deklarationen <code>class mystring;</code> bzw. <code>class config;</code> am Ende der Header haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322121</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:48:19 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:53:35 GMT]]></title><description><![CDATA[<p>Seltsam... der Fehler mit dem NoType kommt nimmer <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="😮"
    /><br />
Ich schwöre, das der vorhin hier nen Notype gebracht hat... nu gehts aufeinmal...<br />
Okay, dann steht dem Vector ja nix mehr im wege xD</p>
<p>Zu deinem PPS, k.A. hab das hier irgendwo gesehn, wo es um Aufteilung einer Klasse in mehrere Dateien ging, und da wurde es genau so erklärt...<br />
Ich habs einfach übernommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Zu deinem PS, wie gesagt ich änder das in FuncName__(...)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322126</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322126</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:53:00 GMT]]></title><description><![CDATA[<p>statt char array würde ich std:string nehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322129</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322129</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:55:11 GMT]]></title><description><![CDATA[<p>BorisDieKlinge schrieb:</p>
<blockquote>
<p>statt char array würde ich std:string nehmen</p>
</blockquote>
<p>Wo genau meinst du bitte??<br />
Ich arbeite die ganze Zeit doch mit string und myString, das einzige mal wo ich char array nehme ist wenn ich das mit c_str() umcaste, damit ichs in den Funktionen verwenden kann???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322132</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:55:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 09:58:09 GMT]]></title><description><![CDATA[<p>achso ok..;) dann passt das;)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322137</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 10 Jul 2007 09:58:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:00:09 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Klingt so wie, einfach mal drauf losgeraten was da falsch sein könnte ohne drüber zu guggen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322140</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322140</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:00:09 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:03:07 GMT]]></title><description><![CDATA[<p>hehe ne.. ich hab beim 2sekunden langen übfliegen ein char Name[200]; endeckt... deswegen hab ich einfach mal den post gemacht;) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322143</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322143</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:03:07 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:04:28 GMT]]></title><description><![CDATA[<p>Blackskyliner schrieb:</p>
<blockquote>
<p>Ich arbeite die ganze Zeit doch mit string und myString, das einzige mal wo ich char array nehme ist wenn ich das mit c_str() umcaste, damit ichs in den Funktionen verwenden kann???</p>
</blockquote>
<p>Erstens kannst du dort die Zwischenspeicherung weglassen und den Rückgabewert von c_str() direkt an fprintf() weitergeben - und zweitens solltest du dort lieber umsteigen auf fstream <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Zur internen Speicherung: Ich würde sogar den vector ganz überspringen und stattdessen eine map&lt;string,pair&lt;myString,MyConfigTypes&gt; &gt; verwenden - damit erleichterst du dir die ganzen Suchvorgänge nach einem bestimmten Config-Eintrag.</p>
<p>PS: Zu den Forward-Deklarationen: Die bringen einen Nutzwert von 0.0, also kannst du sie auch weglassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>PPS: Was genau bezweckst du mit dem <code>Config ConfigHandle;</code> ? Entweder der Nutzer kann seine Config-Objekte bei Bedarf definieren, dann braucht er dieses nicht - oder du beschränkst die Nutzung auf genau dieses Objekt, aber dann solltest du ein vernünftiges Singleton aufbauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322144</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:04:28 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:09:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Erstens kannst du dort die Zwischenspeicherung weglassen und den Rückgabewert von c_str() direkt an fprintf() weitergeben - und zweitens solltest du dort lieber umsteigen auf fstream</p>
</blockquote>
<p>Okay, ich lese mit die Referenz von fstream mal durch, und ändere dementsprechend.</p>
<blockquote>
<p>Zur internen Speicherung: Ich würde sogar den vector ganz überspringen und stattdessen eine map&lt;string,pair&lt;myString,MyConfigTypes&gt; &gt; verwenden - damit erleichterst du dir die ganzen Suchvorgänge nach einem bestimmten Config-Eintrag.</p>
</blockquote>
<p>Hier fängts an interessant zu werden, weil ich ab hier 0,0% Plan hab wie man sowas machen könnte, ein Schnippet wäre schön *liebgugg*</p>
<p>Zum PS: Okay ich machse weg <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Zum PPS: Ja, der iss für den Globalen Zugriff auf die Klasse da, hab schon über so ein Singleton-Dingens nachgedacht, werd mir demnächst mal ne TUt darüber anschauen und euch dann warscheinlich mit sinnlosen Anfängerfragen bombadieren :D:D</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322149</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:09:54 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:24:11 GMT]]></title><description><![CDATA[<p>Eine map&lt;&gt; ist eine nette Angelegenheit - letztendlich ein assoziatives Array (d.h. du kannst beliebige Datentypen als Index verwenden). Für deinen Zweck kannst du den Namen als Schlüssel und den zugehörigen Value (und die Read-Only-Marke) als Wert verwenden und kannst sehr schnell einen beliebigen Schlüssel finden:</p>
<pre><code class="language-cpp">struct MyConfigStrucure
{
  myString Value;
  MyConfgTypes Type
};

typedef map&lt;string,MyConfigStructure&gt; map_type;
map_type ConfigArray;

void Config::SetConfigVar(string VarName, string VarValue){
    __Debug(&quot;SetConfigVar: Start.\n&quot;);
    map_type::iterator pos=ConfigArray.find(VarName);
    if(pos==ConfigArray.end()
    {
        //nicht gefunden
    }
    else if(pos-&gt;Type!=READ_ONLY)
        pos-&gt;Value = VarValue;
    else
        Debug(&quot;Warnung: ConfigValue[%s] ist schreibgeschuetzt.\n\n&quot;,VarName.c_str());
};
</code></pre>
<p>(nur mal ein Ausschnitt)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322159</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322159</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:24:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:35:23 GMT]]></title><description><![CDATA[<p>Doch so einfach <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=":O"
      alt="😮"
    /><br />
Ich 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>
<p>Nun mal noch eine Frage zu Singleton Pattern...</p>
<p>Wenn ich die Dinger hier Privat deklariere,</p>
<pre><code class="language-cpp">private:
    Config() {};
    Config(const Config&amp;);
    Config&amp; operator=(const Config&amp;);
</code></pre>
<p>damit daruf von aussen nicht zugrgriffen werden kann, muss ich die dann auch noch irgendwo definieren oder kann ich das gänzlich weg lassen, also das definieren? Weil ich selber benötige die ja auch nicht in meinen Funktionen?? Das einzige was ich Deklarieren sollte ist der Konstruktur, den CopyKonstruktur muss ich, bzw. will ich nicht definieren und im Destruct wird dann einfach nur das Speicherbereich-Reinigen reingetan, die dann beim Zerfall des static Objektes gecalled wird..</p>
<p>Des weiteren reich es dann auch eine public Method zu implementieren, die einfach ein Statische sobjekt erzeugt und zurück gibt oder? (Meyers-Singleton)<br />
So gen Richtugn:</p>
<pre><code class="language-cpp">public:
        static Config&amp; GetInstanz() 
        {

            static Config Instanz;
            return Instanz;
        }
</code></pre>
<p>Oder sehe ich das falsch??<br />
Eigentlich müsste´s das doch alles sein, um das Singleton zu implementieren oder??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322165</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:35:23 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Tue, 10 Jul 2007 10:56:36 GMT]]></title><description><![CDATA[<p>Den Copy-Ctor und operator= kannst du undefiniert stehen lassen (schließlich willst du deine Objete nicht kopieren/zuweisen) - die explizite Deklaration ist auch nur notwendig, um zu verhindern, daß der Compiler sie selber anlegt (die impliziten Versionen davon wären public). Den Default-Ctor und Destruktor brauchst du schon, um dein (einziges) Config-Objekt anlegen und zerstören zu können.</p>
<p>Ansonsten reicht der Singleton so für den Hausgebrauch durchaus aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322178</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 10 Jul 2007 10:56:36 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Wed, 11 Jul 2007 08:28:00 GMT]]></title><description><![CDATA[<p>Hab heut erst Zeit gefunden das mal zu testen... FOlgende Fehler werfen sich vor mich...</p>
<pre><code class="language-cpp">if(pos-&gt;Type!=READ_ONLY)
</code></pre>
<p>Bringt folgendes: error: 'struct std::pair&lt;const std::string, MyConfigStructure&gt;' has no member named 'Type'</p>
<p>das gleiche auch für den member 'Value'</p>
<p>Warum ist das so?</p>
<p>EDIT:<br />
Ist es korrekt, wenn ich es in:</p>
<pre><code class="language-cpp">pos-&gt;second.Type
</code></pre>
<p>ändere, weil ich ja auf das 2te element zugreifen will, bzw. auf den 2ten Typen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322823</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Wed, 11 Jul 2007 08:28:00 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Wed, 11 Jul 2007 08:28:11 GMT]]></title><description><![CDATA[<p>Steht doch da: Weil du mit &quot;pos-&gt;&quot; kein MyConfigStructure ansprichst, sondern ein pair&lt;const string, MyConfigStructure&gt;. Wenn du an das MyConfigStructure willst, dann nimm pos-&gt;second.Type.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1322825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322825</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Wed, 11 Jul 2007 08:28:11 GMT</pubDate></item><item><title><![CDATA[Reply to Frage zu meiner Config Klasse on Wed, 11 Jul 2007 08:41:41 GMT]]></title><description><![CDATA[<p>Jetzt klappt alles, 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/1322834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1322834</guid><dc:creator><![CDATA[Blackskyliner]]></dc:creator><pubDate>Wed, 11 Jul 2007 08:41:41 GMT</pubDate></item></channel></rss>