<?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[Data Read Template Class]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin grade ein wenig am herumexperimentieren mit iostream und co, und möchte mir nun eine template class für verschiedene read classen programmieren.<br />
Ist soweit ja kein Problem, allerdings hapert es am letzten Stückchen <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="🙂"
    /><br />
Ich erstelle in der template class ein multidimensionales char array, welches ich dann mit den Zeichenketten füttere, die ich aus Dateien auslese.<br />
Allerdings habe ich jetzt das Problem, das eigentlich alle davon erbenden classen eine unterschiedliche Größe des Arrays benötigen, und ich das leider nich so einfach geregelt bekomme. Ich hatte über eine GetFunktion nachgedacht, die einen Zeiger auf ein Char Array zurückgibt, oder eben ein Vector Array, bin aber mit beidem noch nicht sonderlich gut zurecht gekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Vll hat jemand ja eine Idee, wie man das geschickt lösen könnte, hier mal die template class:</p>
<pre><code class="language-cpp">#ifndef FILE_INPUT_H
#define FILE_INPUT_H
#include &lt;string&gt;
#include &lt;iostream&gt;

#define READ_DATA_MAX_LETTER_IN_ROW 256
#define SIZE_OF_DATA sizeof(m_caData) / sizeof(char) / READ_DATA_MAX_LETTER_IN_ROW

using namespace std;

template &lt;class T&gt;
class TFileInput
{
public:
    TFileInput(void)
    {
        m_sFileDirectory = &quot;&quot;;
        DeleteFileData();
    }
    // open, store and interpret file
    bool ReadFile(string sFileName)
    {
        FILE *Data;
        fopen_s(&amp;Data, (m_sFileDirectory + sFileName).c_str(), &quot;rt&quot;);
        if(!Data)
        {
            return false;
        }
        unsigned int i = 0;
        while(!feof(Data) &amp;&amp; i &lt; SIZE_OF_DATA)
        {
            fgets(m_caData[i], READ_DATA_MAX_LETTER_IN_ROW - 1, Data);
            i++;
        }
        InterpretFile();
        DeleteFileData();
        return true;
    }
protected:
    virtual void InterpretFile() { }

    string m_sFileDirectory;
private:
    void DeleteFileData()
    {
        if (char *pFileData = GetFileData())
        {
            for (unsigned int i = 0; i &lt; SIZE_OF_DATA; i++)
            {
                for (unsigned int j = 0; j &lt; READ_DATA_MAX_LETTER_IN_ROW; j++)
                    m_caData[i][j] = 0;
            }
        }
    }
};
#endif;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/287475/data-read-template-class</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 08:44:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/287475.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 May 2011 14:02:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 14:02:15 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich bin grade ein wenig am herumexperimentieren mit iostream und co, und möchte mir nun eine template class für verschiedene read classen programmieren.<br />
Ist soweit ja kein Problem, allerdings hapert es am letzten Stückchen <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="🙂"
    /><br />
Ich erstelle in der template class ein multidimensionales char array, welches ich dann mit den Zeichenketten füttere, die ich aus Dateien auslese.<br />
Allerdings habe ich jetzt das Problem, das eigentlich alle davon erbenden classen eine unterschiedliche Größe des Arrays benötigen, und ich das leider nich so einfach geregelt bekomme. Ich hatte über eine GetFunktion nachgedacht, die einen Zeiger auf ein Char Array zurückgibt, oder eben ein Vector Array, bin aber mit beidem noch nicht sonderlich gut zurecht gekommen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Vll hat jemand ja eine Idee, wie man das geschickt lösen könnte, hier mal die template class:</p>
<pre><code class="language-cpp">#ifndef FILE_INPUT_H
#define FILE_INPUT_H
#include &lt;string&gt;
#include &lt;iostream&gt;

#define READ_DATA_MAX_LETTER_IN_ROW 256
#define SIZE_OF_DATA sizeof(m_caData) / sizeof(char) / READ_DATA_MAX_LETTER_IN_ROW

using namespace std;

template &lt;class T&gt;
class TFileInput
{
public:
    TFileInput(void)
    {
        m_sFileDirectory = &quot;&quot;;
        DeleteFileData();
    }
    // open, store and interpret file
    bool ReadFile(string sFileName)
    {
        FILE *Data;
        fopen_s(&amp;Data, (m_sFileDirectory + sFileName).c_str(), &quot;rt&quot;);
        if(!Data)
        {
            return false;
        }
        unsigned int i = 0;
        while(!feof(Data) &amp;&amp; i &lt; SIZE_OF_DATA)
        {
            fgets(m_caData[i], READ_DATA_MAX_LETTER_IN_ROW - 1, Data);
            i++;
        }
        InterpretFile();
        DeleteFileData();
        return true;
    }
protected:
    virtual void InterpretFile() { }

    string m_sFileDirectory;
private:
    void DeleteFileData()
    {
        if (char *pFileData = GetFileData())
        {
            for (unsigned int i = 0; i &lt; SIZE_OF_DATA; i++)
            {
                for (unsigned int j = 0; j &lt; READ_DATA_MAX_LETTER_IN_ROW; j++)
                    m_caData[i][j] = 0;
            }
        }
    }
};
#endif;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2070493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070493</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Sun, 29 May 2011 14:02:15 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 14:22:56 GMT]]></title><description><![CDATA[<p>1.) Wieso #define?<br />
2.) Wieso C-Files?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070509</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 29 May 2011 14:22:56 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 14:32:47 GMT]]></title><description><![CDATA[<p>1. was sollte ich stattdessen verwenden?<br />
2. weil ich es so gelernt habe, und keine alternative kenne...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070515</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070515</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Sun, 29 May 2011 14:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 14:35:21 GMT]]></title><description><![CDATA[<p>Wie wäre es mit:</p>
<pre><code class="language-cpp">const unsigned READ_DATA_MAX_LETTER_IN_ROW = 256;
</code></pre>
<p>C++ hat IO-Streams: <a href="http://www.cplusplus.com/reference/iostream/" rel="nofollow">http://www.cplusplus.com/reference/iostream/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070517</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 29 May 2011 14:35:21 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 14:38:03 GMT]]></title><description><![CDATA[<p>und das bringt welchen vorteil mit sich?</p>
<p>danke für den link <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/2070520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070520</guid><dc:creator><![CDATA[DNKpp]]></dc:creator><pubDate>Sun, 29 May 2011 14:38:03 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 14:41:13 GMT]]></title><description><![CDATA[<p>Das erhöht erstens einmal die Lesbarkeit deines Codes.<br />
Außerdem hat C++ schon Operatoren-Überladungen für alle Grunddatentypen, für eiene Typen kann man den Operator auch einfach selbst überladen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070523</guid><dc:creator><![CDATA[314159265358979]]></dc:creator><pubDate>Sun, 29 May 2011 14:41:13 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Sun, 29 May 2011 16:00:33 GMT]]></title><description><![CDATA[<p>Zudem sind sie typsicher.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2070558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070558</guid><dc:creator><![CDATA[EOutOfResources]]></dc:creator><pubDate>Sun, 29 May 2011 16:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Mon, 30 May 2011 10:47:41 GMT]]></title><description><![CDATA[<p>Wenn man allerdings mit Binärdateien arbeitet, kann man sich die fstreams dahin schieben, wo nie die Sonne scheint. <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/2070896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070896</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Mon, 30 May 2011 10:47:41 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Mon, 30 May 2011 10:53:42 GMT]]></title><description><![CDATA[<p>anti-freak schrieb:</p>
<blockquote>
<p>und das bringt welchen vorteil mit sich?</p>
</blockquote>
<p>Man vergisst nicht das fclose, wie du in deinem Code <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/2070901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2070901</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 30 May 2011 10:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Mon, 30 May 2011 16:41:25 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Wenn man allerdings mit Binärdateien arbeitet, kann man sich die fstreams dahin schieben, wo nie die Sonne scheint. <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>
</blockquote>
<p>Wieso denn das? fstreams können auch mit Binärdaten umgehen, wenn du es wirklich benötigst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071057</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071057</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 30 May 2011 16:41:25 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Mon, 30 May 2011 17:07:51 GMT]]></title><description><![CDATA[<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wie wäre es mit:</p>
<pre><code class="language-cpp">const unsigned READ_DATA_MAX_LETTER_IN_ROW = 256;
</code></pre>
</blockquote>
<p>Aber hoffentlich nicht global.</p>
<p>anti-freak schrieb:</p>
<blockquote>
<p>hier mal die template class:</p>
</blockquote>
<p>Class Template, um genau zu sein.</p>
<blockquote>
<pre><code class="language-cpp">#define SIZE_OF_DATA sizeof(m_caData) / sizeof(char) / READ_DATA_MAX_LETTER_IN_ROW
</code></pre>
</blockquote>
<p><code>sizeof(char)</code> ist immer 1.</p>
<blockquote>
<pre><code class="language-cpp">TFileInput(void)
    {
        m_sFileDirectory = &quot;&quot;;
</code></pre>
</blockquote>
<p>Unnötig.</p>
<blockquote>
<pre><code class="language-cpp">DeleteFileData();
</code></pre>
</blockquote>
<p>In nem Konstruktor??</p>
<blockquote>
<pre><code class="language-cpp">void DeleteFileData()
    {
        if (char *pFileData = GetFileData())
</code></pre>
</blockquote>
<p>Weshalb die Zuweisung? Die Variable benutzt du später nicht mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071076</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071076</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 30 May 2011 17:07:51 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Tue, 31 May 2011 06:57:28 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>314159265358979 schrieb:</p>
<blockquote>
<p>Wie wäre es mit:</p>
<pre><code class="language-cpp">const unsigned READ_DATA_MAX_LETTER_IN_ROW = 256;
</code></pre>
</blockquote>
<p>Aber hoffentlich nicht global.</p>
</blockquote>
<p>Warum nicht global? Für Konstanten ist das doch völlig ok.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071267</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 31 May 2011 06:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Tue, 31 May 2011 10:20:42 GMT]]></title><description><![CDATA[<p>Was hat denn der Rest des Programms mit einer IO-Konstante zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071358</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 31 May 2011 10:20:42 GMT</pubDate></item><item><title><![CDATA[Reply to Data Read Template Class on Tue, 31 May 2011 11:25:48 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Was hat denn der Rest des Programms mit einer IO-Konstante zu tun?</p>
</blockquote>
<p>Genausoviel wie mit der Implementierung der ganzen FileInput-Geschichte. Nämlich nichts.<br />
Der Fehler ist aber nicht, dass die Konstante global definiert wird, sondern dass der ganze Schmu inline im Header implementiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2071383</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2071383</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 31 May 2011 11:25:48 GMT</pubDate></item></channel></rss>