<?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[Gültigkeitsbereich von Funktion]]></title><description><![CDATA[<p>Hallo,<br />
das qt-Forum hat mich hier her geschickt. Ich komme nicht mehr weiter und ich will einen Teil meiner Diplomarbeit mit C++ und QT schreiben.<br />
Das Problem: Ich leite eine QT-Klasse ab (QSpinBox) und will den Wert, der als<br />
&quot;public function: int value () const&quot; gespeichert ist. Nun will ich das aber in einer eigenen Klasse in einer eigenen Funktion als char über die serielle Schnittstelle raus schicken und weiß nicht wie ich auf diesen Wert zugreifen kann von dort.<br />
Hat was mit Gültigkeit von Variablen zu tun aber ich finde nichts.<br />
Der Code:</p>
<p>MainWindow::MainWindow() //in mainwindow.cpp<br />
{...<br />
QSpinBox* spint =new QSpinBox; // ist in einem Andockfenster<br />
...<br />
}</p>
<p>void Seriell::empfangen() //ist in seriell.cpp<br />
{<br />
//int wert;<br />
wert=spint-&gt;value();<br />
}</p>
<p>Ich habe schon ein wenig probiert, auch dass ich die Klasse global ableite, doch irgendwie überblicke ich das nicht und habe nur die Meldung, dass spint in diesem Gültigkeitsbereich nicht definiert ist. Irgendwo muss ich noch mitteilen, dass ich global auf value zu greifen kann.</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/238916/gültigkeitsbereich-von-funktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 17:07:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/238916.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 17 Apr 2009 08:47:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gültigkeitsbereich von Funktion on Fri, 17 Apr 2009 08:47:26 GMT]]></title><description><![CDATA[<p>Hallo,<br />
das qt-Forum hat mich hier her geschickt. Ich komme nicht mehr weiter und ich will einen Teil meiner Diplomarbeit mit C++ und QT schreiben.<br />
Das Problem: Ich leite eine QT-Klasse ab (QSpinBox) und will den Wert, der als<br />
&quot;public function: int value () const&quot; gespeichert ist. Nun will ich das aber in einer eigenen Klasse in einer eigenen Funktion als char über die serielle Schnittstelle raus schicken und weiß nicht wie ich auf diesen Wert zugreifen kann von dort.<br />
Hat was mit Gültigkeit von Variablen zu tun aber ich finde nichts.<br />
Der Code:</p>
<p>MainWindow::MainWindow() //in mainwindow.cpp<br />
{...<br />
QSpinBox* spint =new QSpinBox; // ist in einem Andockfenster<br />
...<br />
}</p>
<p>void Seriell::empfangen() //ist in seriell.cpp<br />
{<br />
//int wert;<br />
wert=spint-&gt;value();<br />
}</p>
<p>Ich habe schon ein wenig probiert, auch dass ich die Klasse global ableite, doch irgendwie überblicke ich das nicht und habe nur die Meldung, dass spint in diesem Gültigkeitsbereich nicht definiert ist. Irgendwo muss ich noch mitteilen, dass ich global auf value zu greifen kann.</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697086</guid><dc:creator><![CDATA[mh1977]]></dc:creator><pubDate>Fri, 17 Apr 2009 08:47:26 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeitsbereich von Funktion on Fri, 17 Apr 2009 09:10:33 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">MainWindow::MainWindow() //in mainwindow.cpp
{
// ...
QSpinBox* spint =new QSpinBox; // ist in einem Andockfenster
// ...
}
</code></pre>
<pre><code class="language-cpp">void Seriell::empfangen() //ist in seriell.cpp
{
//int wert;
wert=spint-&gt;value();
}
</code></pre>
<p><em>spint</em> müsste der Klasse Seriell auch bekannt sein (als Attribut oder als Referenzparameter der Methode empfangen. Das halte ich - in dem Fall, dass sich Seriell wirklich nur um die Datenübertragung kümmert - für murks, da Seriell hier &quot;Detailwissen&quot; über die Klasse QSpinBox haben muss (=&gt; Methodenaufruf).</p>
<p>Du solltest der Klasse Seriell eine Methode verpassen, die immer dann aufgerufen wird (aus deiner GUI), wenn sich der Wert deiner QSpinBox ändert.</p>
<pre><code class="language-cpp">void Seriell::value_changed(int new_value) { /* ... */ }
</code></pre>
<p>Der neue Wert wird dann als Attribut der Klasse Seriell abgelegt. Wird nun Seriell::empfangen aufgerufen, kannst du das Attribut verwenden.</p>
<p>Grüße... Heiko</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1697103</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697103</guid><dc:creator><![CDATA[bwbg]]></dc:creator><pubDate>Fri, 17 Apr 2009 09:10:33 GMT</pubDate></item><item><title><![CDATA[Reply to Gültigkeitsbereich von Funktion on Fri, 17 Apr 2009 10:16:19 GMT]]></title><description><![CDATA[<p>Und am allerschönsten wäre es meiner meinung nach mit einem signal slot</p>
<pre><code>MainWindow::MainWindow() //in mainwindow.cpp
{
// ...
QSpinBox* spint =new QSpinBox; // ist in einem Andockfenster
connect(spint, SIGNAL(void valueChanged(int)), seriell, SLOT(value_changed(int)));
} 

void Seriell::value_changed(int new_value) { /* ... */ }
</code></pre>
<p>Diese Möglichkeit erfordert allerdings, dass Seriell von QObject abgeleitet wird...</p>
<p>Aber um deine frage zu beantworten, falls dir die schönheit des codes egal ist, hier ein beispiel wie du vorgehen könntest: Folgende Dateien:</p>
<pre><code>globals.h
A.h
A.cpp
B.h
B.cpp
</code></pre>
<pre><code>globals.h
#include &lt;string&gt;
extern std::string* spint;
</code></pre>
<pre><code>A.cpp
#include &quot;globals.h&quot;
#include &quot;A.h&quot;

std::string* spint;

A::A()
{
  spint = new std::string(&quot;Test&quot;);
}

A::~A()
{
  delete spint;
  spint = 0;
}
</code></pre>
<pre><code>B.cpp
#include &lt;iostream&gt;
#include &quot;B.h&quot;
#include &quot;globals.h&quot;

void B::print()
{
  std::cout &lt;&lt; spint-&gt;c_str() &lt;&lt; std::endl;
}
</code></pre>
<pre><code>main.cpp
#include &quot;A.h&quot;
#include &quot;B.h&quot;

int main()
{
  A a;
  B b;
  b.print();
}
</code></pre>
<p>A.h und B.h sind einfach die definitionen von den beiden klassen, also nix besonderes...<br />
ich habe jetzt einfach mal dein QSpinBox durch std::string ersetzt... Aber das prinzip sollte klar sein (du brauchst eine globale Variable, was seeeehr hässlich ist, aber du wolltest es wissen <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/1697139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1697139</guid><dc:creator><![CDATA[Jocker16]]></dc:creator><pubDate>Fri, 17 Apr 2009 10:16:19 GMT</pubDate></item></channel></rss>