<?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[private funktion kann private variable nicht lesen]]></title><description><![CDATA[<p>Hallo,<br />
ich hab ein problem und kann mir den fehler nicht erklären ich poste erstmal den code:<br />
StundenplanDB.h</p>
<pre><code class="language-cpp">#ifndef STUNDENPLANDB_H
#define STUNDENPLANDB_H
#include &lt;iostream&gt;
#include &lt;string&gt;

class StundenplanDB
{
	public:
		class Exception 
		{
			public:
				Exception(const std::string&amp; errortext)
				{
					m_Errortext = errortext;
				}
				virtual const char* what() const
				{
					return m_Errortext.c_str();
				}
				virtual ~Exception() {}
			private:
				std::string m_Errortext;
		};
		StundenplanDB() throw(Exception) {}
		virtual void connect() = 0;
		virtual void close() = 0;
		virtual std::string query(std::string query) = 0;
};

#endif
</code></pre>
<p>SQL.h</p>
<pre><code class="language-cpp">#ifndef SQL_H
#define SQL_H
#include &quot;StundenplanDB.h&quot;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;sqlite3.h&gt;

class SQL : public StundenplanDB
{
	public:
		virtual void connect();
		virtual void close();
		virtual std::string query(std::string query);
	private:
		sqlite3 *m_db;
		//char *errMsg;
		int m_rc;
		std::vector&lt;std::string&gt; m_return;
		static int callback(void *NotUsed, int argc, char **argv, char **azColName);
};

#endif
</code></pre>
<p>SQL.cpp</p>
<pre><code class="language-cpp">#include &quot;SQL.h&quot;
using namespace std;

void SQL::connect()
{
	m_rc = sqlite3_open(&quot;stundenplan.db&quot;, &amp;m_db);
	if(m_rc)
	{
		string error = &quot;Konnte Datenbank nicht öffnen:&quot;;
		error += sqlite3_errmsg(m_db);
		throw Exception(error.c_str());
	}
}
void SQL::close()
{
	sqlite3_close(m_db);
}
string SQL::query(string query)
{
	//throw Exception(&quot;Fehlerhafte Anfrage&quot;);
}
static int callback(void* NotUsed, int argc, char **argv, char **azColName)
{
	int i;
	for(i=0; i&lt;argc; i++)
	{
//-------------&gt;//HIER SQL.cpp:27: error: ... &lt;-----------------------------
		m_return.push_back(&quot;Hallo&quot;);//(argv[i] ? argv[i] : &quot;NULL&quot;);
	}
	return 0;
}
</code></pre>
<p>Fehler:<br />
SQL.cpp:27: error: `m_return' undeclared (first use this function)<br />
SQL.cpp:27: error: (Each undeclared identifier is reported only once for each<br />
function it appears in.)<br />
hab die stelle markiert<br />
habt ihr villeicht eine idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133416/private-funktion-kann-private-variable-nicht-lesen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 22:38:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133416.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 17 Jan 2006 16:19:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to private funktion kann private variable nicht lesen on Tue, 17 Jan 2006 16:19:48 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich hab ein problem und kann mir den fehler nicht erklären ich poste erstmal den code:<br />
StundenplanDB.h</p>
<pre><code class="language-cpp">#ifndef STUNDENPLANDB_H
#define STUNDENPLANDB_H
#include &lt;iostream&gt;
#include &lt;string&gt;

class StundenplanDB
{
	public:
		class Exception 
		{
			public:
				Exception(const std::string&amp; errortext)
				{
					m_Errortext = errortext;
				}
				virtual const char* what() const
				{
					return m_Errortext.c_str();
				}
				virtual ~Exception() {}
			private:
				std::string m_Errortext;
		};
		StundenplanDB() throw(Exception) {}
		virtual void connect() = 0;
		virtual void close() = 0;
		virtual std::string query(std::string query) = 0;
};

#endif
</code></pre>
<p>SQL.h</p>
<pre><code class="language-cpp">#ifndef SQL_H
#define SQL_H
#include &quot;StundenplanDB.h&quot;
#include &lt;string&gt;
#include &lt;vector&gt;
#include &lt;sqlite3.h&gt;

class SQL : public StundenplanDB
{
	public:
		virtual void connect();
		virtual void close();
		virtual std::string query(std::string query);
	private:
		sqlite3 *m_db;
		//char *errMsg;
		int m_rc;
		std::vector&lt;std::string&gt; m_return;
		static int callback(void *NotUsed, int argc, char **argv, char **azColName);
};

#endif
</code></pre>
<p>SQL.cpp</p>
<pre><code class="language-cpp">#include &quot;SQL.h&quot;
using namespace std;

void SQL::connect()
{
	m_rc = sqlite3_open(&quot;stundenplan.db&quot;, &amp;m_db);
	if(m_rc)
	{
		string error = &quot;Konnte Datenbank nicht öffnen:&quot;;
		error += sqlite3_errmsg(m_db);
		throw Exception(error.c_str());
	}
}
void SQL::close()
{
	sqlite3_close(m_db);
}
string SQL::query(string query)
{
	//throw Exception(&quot;Fehlerhafte Anfrage&quot;);
}
static int callback(void* NotUsed, int argc, char **argv, char **azColName)
{
	int i;
	for(i=0; i&lt;argc; i++)
	{
//-------------&gt;//HIER SQL.cpp:27: error: ... &lt;-----------------------------
		m_return.push_back(&quot;Hallo&quot;);//(argv[i] ? argv[i] : &quot;NULL&quot;);
	}
	return 0;
}
</code></pre>
<p>Fehler:<br />
SQL.cpp:27: error: `m_return' undeclared (first use this function)<br />
SQL.cpp:27: error: (Each undeclared identifier is reported only once for each<br />
function it appears in.)<br />
hab die stelle markiert<br />
habt ihr villeicht eine idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969088</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969088</guid><dc:creator><![CDATA[mtaesler|off]]></dc:creator><pubDate>Tue, 17 Jan 2006 16:19:48 GMT</pubDate></item><item><title><![CDATA[Reply to private funktion kann private variable nicht lesen on Tue, 17 Jan 2006 16:29:27 GMT]]></title><description><![CDATA[<p>Abgesehen davon dass deine Definition von callback nicht der Klasse zugehört sondern als Funktion für sich steht (da würde SQL:: fehlen), kannst Du in einer statischen Methode niemals auf ein Mitglied zugreifen. Warum? Weil Du für den Aufruf einer statischen Methode kein Objekt brauchst, zu dem dieses Mitglied gehören könnte. Genauergesagt gibt es in static SQL::callback keine gültige Instanz der Klasse SQL.</p>
<p>EDIT: Hint! GENAU für sowas sind im allgemeinen solche void-Zeiger wie Dein NotUsed gedacht <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/969094</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969094</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 17 Jan 2006 16:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to private funktion kann private variable nicht lesen on Tue, 17 Jan 2006 16:30:10 GMT]]></title><description><![CDATA[<p>du meinst die statische memberfunktion</p>
<pre><code class="language-cpp">int SQL::callback( // ...
</code></pre>
<p>nicht die freie funktion</p>
<pre><code class="language-cpp">static int callback( // ...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/969097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969097</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 17 Jan 2006 16:30:10 GMT</pubDate></item><item><title><![CDATA[Reply to private funktion kann private variable nicht lesen on Tue, 17 Jan 2006 17:34:20 GMT]]></title><description><![CDATA[<p>hallo,<br />
wie funktioniert das mit void*<br />
(die callback funktion ist nicht von mir hab sie aus der doku von sqlite3)<br />
vielen dank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969152</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969152</guid><dc:creator><![CDATA[mtaesler|off]]></dc:creator><pubDate>Tue, 17 Jan 2006 17:34:20 GMT</pubDate></item><item><title><![CDATA[Reply to private funktion kann private variable nicht lesen on Tue, 17 Jan 2006 18:52:25 GMT]]></title><description><![CDATA[<p>Die callback-Methode musst Du ja irgendwo bei sqlite registrieren. Dort kannst Du mit ziemlicher Sicherheit auch ein void* übergeben, was dann immer der Callback-Funktion übergeben wird, wenn diese von sqlite aufgerufen wird. Sinngemäß etwa:</p>
<pre><code class="language-cpp">...
SQL *sqlobject = new SQL();
sqlite_register_callback(SQL::callback, (void*)sqlobject); // Achtung Pseudocode
...
int SQL::callback(void* NotUsed, int argc, char **argv, char **azColName)
{
  SQL *sqlobject = (SQL*)NotUsed;
  /* arbeite mit sqlobject-&gt;m_Return */
}
</code></pre>
<p>P.S.: Soweit ich weiss gibts für sqlite aber auch einen C++-Wrapper (?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/969220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969220</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 17 Jan 2006 18:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to private funktion kann private variable nicht lesen on Tue, 17 Jan 2006 23:34:28 GMT]]></title><description><![CDATA[<p>du kannst auch m_return static machen:</p>
<pre><code class="language-cpp">static std::vector&lt;std::string&gt; m_return;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/969396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/969396</guid><dc:creator><![CDATA[Konfusius]]></dc:creator><pubDate>Tue, 17 Jan 2006 23:34:28 GMT</pubDate></item></channel></rss>