<?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[Fehler im Konstruktor]]></title><description><![CDATA[<p>Tach, folgendes</p>
<p>mmlexer.hpp</p>
<pre><code>#ifndef __MMLEXER_HPP__
#define __MMLEXER_HPP__

#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;queue&gt;
#include &quot;mmutils.hpp&quot;

namespace MM {

  typedef enum {
    tokAdd = '+',
    tokSub = '-',
    tokMul = '*',
    tokDiv = '/',
    tokPow = '^',
    tokFac = '!',

    tokAsn = '=',
    tokOPr = '(',
    tokCPr = ')',
    tokOCP = '{',
    tokCCP = '}',
    tokSep = ';',
    tokCom = ',',
    tokPrt = '&gt;',

    tokIdr,
    tokVal
  } TokenType;

  class Lexer {
    public:
      typedef struct {
        unsigned type;
        double value;
        std::string identifier;
      } Token;        
      Lexer(std::istream&amp;, bool, bool);
      bool Parse();
      bool IsParsed() const;
      bool NextToken(Token&amp;);
    private:
      std::istream m_src;
      std::queue&lt;Token&gt; m_data;
      bool m_otf;
      bool m_debug;
      bool m_parsed;
      bool GetToken(Token&amp;);
  };

}

#endif //__MMLEXER_HPP__
</code></pre>
<p>mmlexer.cpp</p>
<pre><code>#include &quot;mmlexer.hpp&quot;

bool MM::Lexer::GetToken(Token&amp; token) {
  char ch;
  do {
    if (!m_src.get(ch)) {
      token.type = tokSep;
      return false;
    };
  } while (is_space(ch) || is_cntrl(ch));
  switch (ch) {
    case tokAdd:
    case tokSub:
    case tokMul:
    case tokDiv:
    case tokPow:
    case tokFac:
    case tokAsn:
    case tokOPr:
    case tokCPr:
    case tokOCP:
    case tokCCP:
    case tokSep:
    case tokCom:
    case tokPrt:
      token.type = ch;
      return true;
    default:
      if (is_letter(ch)) {
        token.identifier += ch;
        while (m_src.get(ch) &amp;&amp; is_letter(ch))
          token.identifier += ch;
        token.type = tokIdr;
        return true;
      };
      if (is_digit(ch)) {
        m_src.putback(ch) &gt;&gt; token.value;
        token.type = tokVal;
        return true;
      };
  };
  return false;
}

bool MM::Lexer::NextToken(Token&amp; token) {
  bool result;
  if (m_otf) {
    result = GetToken(token);
  }
  else {
    if (result = m_data.size()) {
      token = m_data.front();
      m_data.pop();
    };
  };
  return result;
}

bool MM::Lexer::Parse() {
  if (m_otf)
    {
      Token token;
      clear_queue&lt;Token&gt;(m_data);
      while (GetToken(token))
        m_data.push(token);
      return true;
    };
  return false;
}

MM::Lexer::Lexer(std::istream&amp; src, bool otf, bool debug)
: m_src(src), m_otf(otf), m_debug(debug), m_parsed(false) {
  m_parsed = Parse();
}

bool MM::Lexer::IsParsed() const {
  return m_parsed;
}
</code></pre>
<blockquote>
<p>C:/Programme/DevCpp/include/c++/3.4.2/bits/ios_base.h: In copy constructor <code>std::basic\_ios&lt;char, std::char\_traits&lt;char&gt; &gt;::basic\_ios(const std::basic\_ios&lt;char, std::char\_traits&lt;char&gt; &gt;&amp;)': C:/Programme/DevCpp/include/c++/3.4.2/bits/ios\_base.h:738: error:</code>std::ios_base::ios_base(const std::ios_base&amp;)' is private<br />
mmlexer.cpp:72: error: within this context</p>
</blockquote>
<p>Die Meldung <em>&quot;mmlexer.cpp:72: error: within this context&quot;</em> verweist auf den Konstruktor von <em>Lexer</em> in <em>mmlexer.cpp</em>. Ich hab schon ewig im Netz rumgesucht, aber einfach keinen Hinweis auf die Problemlösung gefunden! Ich hoffe mir kann jemand helfen, denn es kann eigentlich nichts kompliziertes sein.</p>
<p>MfG &amp;&amp; Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/127052/fehler-im-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 23:10:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/127052.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 21 Nov 2005 00:02:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehler im Konstruktor on Mon, 21 Nov 2005 00:02:45 GMT]]></title><description><![CDATA[<p>Tach, folgendes</p>
<p>mmlexer.hpp</p>
<pre><code>#ifndef __MMLEXER_HPP__
#define __MMLEXER_HPP__

#include &lt;string&gt;
#include &lt;istream&gt;
#include &lt;queue&gt;
#include &quot;mmutils.hpp&quot;

namespace MM {

  typedef enum {
    tokAdd = '+',
    tokSub = '-',
    tokMul = '*',
    tokDiv = '/',
    tokPow = '^',
    tokFac = '!',

    tokAsn = '=',
    tokOPr = '(',
    tokCPr = ')',
    tokOCP = '{',
    tokCCP = '}',
    tokSep = ';',
    tokCom = ',',
    tokPrt = '&gt;',

    tokIdr,
    tokVal
  } TokenType;

  class Lexer {
    public:
      typedef struct {
        unsigned type;
        double value;
        std::string identifier;
      } Token;        
      Lexer(std::istream&amp;, bool, bool);
      bool Parse();
      bool IsParsed() const;
      bool NextToken(Token&amp;);
    private:
      std::istream m_src;
      std::queue&lt;Token&gt; m_data;
      bool m_otf;
      bool m_debug;
      bool m_parsed;
      bool GetToken(Token&amp;);
  };

}

#endif //__MMLEXER_HPP__
</code></pre>
<p>mmlexer.cpp</p>
<pre><code>#include &quot;mmlexer.hpp&quot;

bool MM::Lexer::GetToken(Token&amp; token) {
  char ch;
  do {
    if (!m_src.get(ch)) {
      token.type = tokSep;
      return false;
    };
  } while (is_space(ch) || is_cntrl(ch));
  switch (ch) {
    case tokAdd:
    case tokSub:
    case tokMul:
    case tokDiv:
    case tokPow:
    case tokFac:
    case tokAsn:
    case tokOPr:
    case tokCPr:
    case tokOCP:
    case tokCCP:
    case tokSep:
    case tokCom:
    case tokPrt:
      token.type = ch;
      return true;
    default:
      if (is_letter(ch)) {
        token.identifier += ch;
        while (m_src.get(ch) &amp;&amp; is_letter(ch))
          token.identifier += ch;
        token.type = tokIdr;
        return true;
      };
      if (is_digit(ch)) {
        m_src.putback(ch) &gt;&gt; token.value;
        token.type = tokVal;
        return true;
      };
  };
  return false;
}

bool MM::Lexer::NextToken(Token&amp; token) {
  bool result;
  if (m_otf) {
    result = GetToken(token);
  }
  else {
    if (result = m_data.size()) {
      token = m_data.front();
      m_data.pop();
    };
  };
  return result;
}

bool MM::Lexer::Parse() {
  if (m_otf)
    {
      Token token;
      clear_queue&lt;Token&gt;(m_data);
      while (GetToken(token))
        m_data.push(token);
      return true;
    };
  return false;
}

MM::Lexer::Lexer(std::istream&amp; src, bool otf, bool debug)
: m_src(src), m_otf(otf), m_debug(debug), m_parsed(false) {
  m_parsed = Parse();
}

bool MM::Lexer::IsParsed() const {
  return m_parsed;
}
</code></pre>
<blockquote>
<p>C:/Programme/DevCpp/include/c++/3.4.2/bits/ios_base.h: In copy constructor <code>std::basic\_ios&lt;char, std::char\_traits&lt;char&gt; &gt;::basic\_ios(const std::basic\_ios&lt;char, std::char\_traits&lt;char&gt; &gt;&amp;)': C:/Programme/DevCpp/include/c++/3.4.2/bits/ios\_base.h:738: error:</code>std::ios_base::ios_base(const std::ios_base&amp;)' is private<br />
mmlexer.cpp:72: error: within this context</p>
</blockquote>
<p>Die Meldung <em>&quot;mmlexer.cpp:72: error: within this context&quot;</em> verweist auf den Konstruktor von <em>Lexer</em> in <em>mmlexer.cpp</em>. Ich hab schon ewig im Netz rumgesucht, aber einfach keinen Hinweis auf die Problemlösung gefunden! Ich hoffe mir kann jemand helfen, denn es kann eigentlich nichts kompliziertes sein.</p>
<p>MfG &amp;&amp; Thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922903</guid><dc:creator><![CDATA[sheep++]]></dc:creator><pubDate>Mon, 21 Nov 2005 00:02:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler im Konstruktor on Mon, 21 Nov 2005 00:18:45 GMT]]></title><description><![CDATA[<p>du hältst dir doch wohl hoffentlich keine streams als member? das ist nämlich pfui-gack</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922911</guid><dc:creator><![CDATA[nanunu]]></dc:creator><pubDate>Mon, 21 Nov 2005 00:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler im Konstruktor on Mon, 21 Nov 2005 00:21:51 GMT]]></title><description><![CDATA[<p>Tach...</p>
<p>nein, nur als Referenz <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="😉"
    /> ... Wo liegt der Fehler bzw. wie kann ichs besser machen???</p>
<p>MfG</p>
]]></description><link>https://www.c-plusplus.net/forum/post/922913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922913</guid><dc:creator><![CDATA[sheep++]]></dc:creator><pubDate>Mon, 21 Nov 2005 00:21:51 GMT</pubDate></item><item><title><![CDATA[Reply to Fehler im Konstruktor on Mon, 21 Nov 2005 07:27:08 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Lexer
{
  ...
private:
  std::istream m_src;
}
</code></pre>
<p>Das sieht mir überhaupt nicht nach einer Referenz aus <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="😉"
    /> Richtig sollte es heißen:</p>
<pre><code class="language-cpp">std::istream&amp; m_src;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/922980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/922980</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 21 Nov 2005 07:27:08 GMT</pubDate></item></channel></rss>