<?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[Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe hier zwei Funktionen die an sich gleich sind nur ein unterschiedliches Interface haben</p>
<p>Variante 1:</p>
<pre><code>void Ploter::plot_line(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine, std::vector&lt;punkt&lt;double&gt;&gt; &amp;points, ploting_range &amp;std, bool show, QPen pen)
{
	QwtSplineCurveFitter *fitter = new QwtSplineCurveFitter();
	fitter-&gt;setFitMode(QwtSplineCurveFitter::Spline);
	fitter-&gt;setSplineSize(points.size());
	QVector&lt;double&gt; x, y;
	for (size_t i = 0; i &lt; points.size(); i++) {
		x.push_back(points.at(i).get_x());
		y.push_back(points.at(i).get_y());
	}

	myLine-&gt;setSamples(x, y);
	myLine-&gt;setCurveFitter(fitter);

	draw_spline(myLine, pen, show);
}
</code></pre>
<p>Variante 2:</p>
<pre><code>void Ploter::plot_line(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine, funktion &amp;q ,ploting_range &amp;std, bool show, QPen pen )
{
std::vector&lt;punkt&lt;double&gt;&gt;fkt_werte = q.werte(std.von, std.bis, std.schrittweite);
	QwtSplineCurveFitter *fitter = new QwtSplineCurveFitter();
	fitter-&gt;setFitMode(QwtSplineCurveFitter::Spline);
	fitter-&gt;setSplineSize(fkt_werte.size());
	QVector&lt;double&gt; x, y;
	for (size_t i = 0; i &lt; fkt_werte.size(); i++) {
		x.push_back(fkt_werte.at(i).get_x());
		y.push_back(fkt_werte.at(i).get_y());
	}

	myLine-&gt;setSamples(x, y);
	myLine-&gt;setCurveFitter(fitter);

	draw_spline(myLine, pen, show);
}
</code></pre>
<p>Beide Funktionen machen das gleiche. Der Unterschied besteht nur darin das Variante 1 ein vector mit Punkten übergeben wird und Variante 2 eine Funtkion um sich die Punkte selbst zu errechnen.<br />
Es wird dabei eine QwtPlotCurve mit Werten gefüttert. Die QwtPlotCurve wird durch den Aufrufer erstellt und als shared_ptr übergeben.<br />
Die draw_spline - Methode ist nur dazu da die QwtPlotCurve in einem QwtPlot zu zeichen.</p>
<pre><code>void Ploter::draw_spline(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine,QPen pen, bool show) {
	myLine-&gt;setPen(pen);
	myLine-&gt;attach(plot);
	myLine-&gt;setVisible(show);
	plot-&gt;replot();
}
</code></pre>
<p>Die Klasse &quot;Plotter&quot; enthält hierbei den QwtPlot als pointer.</p>
<p>Das eigentliche Problem ist das Variante 1 von &quot;plot_line&quot; nichts im Plot darstellt, obwohl sämtliche Wertepaare in der QwtPlotCurve enthalten sind (zumindest laut dem Debugger).</p>
<p>Was mich zur Verzweiflung bringt ist das ich einfach nicht verstehe warum, denn die Funktionen sind vom Prinzip her gleich.</p>
<p>Wo liegt denn der Fehler? Was übersehe ich seit zwei Tagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/343277/gleiche-funktion-mit-verschiedenem-interface-liefert-unterschiedliche-ergebnisse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 13 Oct 2026 13:14:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/343277.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 12 Jun 2017 22:12:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Mon, 12 Jun 2017 22:12:25 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Ich habe hier zwei Funktionen die an sich gleich sind nur ein unterschiedliches Interface haben</p>
<p>Variante 1:</p>
<pre><code>void Ploter::plot_line(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine, std::vector&lt;punkt&lt;double&gt;&gt; &amp;points, ploting_range &amp;std, bool show, QPen pen)
{
	QwtSplineCurveFitter *fitter = new QwtSplineCurveFitter();
	fitter-&gt;setFitMode(QwtSplineCurveFitter::Spline);
	fitter-&gt;setSplineSize(points.size());
	QVector&lt;double&gt; x, y;
	for (size_t i = 0; i &lt; points.size(); i++) {
		x.push_back(points.at(i).get_x());
		y.push_back(points.at(i).get_y());
	}

	myLine-&gt;setSamples(x, y);
	myLine-&gt;setCurveFitter(fitter);

	draw_spline(myLine, pen, show);
}
</code></pre>
<p>Variante 2:</p>
<pre><code>void Ploter::plot_line(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine, funktion &amp;q ,ploting_range &amp;std, bool show, QPen pen )
{
std::vector&lt;punkt&lt;double&gt;&gt;fkt_werte = q.werte(std.von, std.bis, std.schrittweite);
	QwtSplineCurveFitter *fitter = new QwtSplineCurveFitter();
	fitter-&gt;setFitMode(QwtSplineCurveFitter::Spline);
	fitter-&gt;setSplineSize(fkt_werte.size());
	QVector&lt;double&gt; x, y;
	for (size_t i = 0; i &lt; fkt_werte.size(); i++) {
		x.push_back(fkt_werte.at(i).get_x());
		y.push_back(fkt_werte.at(i).get_y());
	}

	myLine-&gt;setSamples(x, y);
	myLine-&gt;setCurveFitter(fitter);

	draw_spline(myLine, pen, show);
}
</code></pre>
<p>Beide Funktionen machen das gleiche. Der Unterschied besteht nur darin das Variante 1 ein vector mit Punkten übergeben wird und Variante 2 eine Funtkion um sich die Punkte selbst zu errechnen.<br />
Es wird dabei eine QwtPlotCurve mit Werten gefüttert. Die QwtPlotCurve wird durch den Aufrufer erstellt und als shared_ptr übergeben.<br />
Die draw_spline - Methode ist nur dazu da die QwtPlotCurve in einem QwtPlot zu zeichen.</p>
<pre><code>void Ploter::draw_spline(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine,QPen pen, bool show) {
	myLine-&gt;setPen(pen);
	myLine-&gt;attach(plot);
	myLine-&gt;setVisible(show);
	plot-&gt;replot();
}
</code></pre>
<p>Die Klasse &quot;Plotter&quot; enthält hierbei den QwtPlot als pointer.</p>
<p>Das eigentliche Problem ist das Variante 1 von &quot;plot_line&quot; nichts im Plot darstellt, obwohl sämtliche Wertepaare in der QwtPlotCurve enthalten sind (zumindest laut dem Debugger).</p>
<p>Was mich zur Verzweiflung bringt ist das ich einfach nicht verstehe warum, denn die Funktionen sind vom Prinzip her gleich.</p>
<p>Wo liegt denn der Fehler? Was übersehe ich seit zwei Tagen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532449</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532449</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Mon, 12 Jun 2017 22:12:25 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 06:57:15 GMT]]></title><description><![CDATA[<p>axels. schrieb:</p>
<blockquote>
<p>denn die Funktionen sind vom Prinzip her gleich.</p>
<p>Wo liegt denn der Fehler? Was übersehe ich seit zwei Tagen?</p>
</blockquote>
<p>Das ist schon schlecht. Doppelter Code bedeutet doppelter Aufwand und doppelte Fehlermöglichkeiten =&gt; DRY</p>
<p>Hast du mal versucht, das Ergebnis der Funktion q dem Aufruf der ersten Funktion plot_line zu übergeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532466</guid><dc:creator><![CDATA[temi]]></dc:creator><pubDate>Tue, 13 Jun 2017 06:57:15 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 06:55:17 GMT]]></title><description><![CDATA[<p>Hast du denn fkt_werte bzw. fkt_werte.size() mal überprüft?</p>
<p>Wenn du sowieso beide Varianten hast, dann verwende doch:</p>
<pre><code class="language-cpp">void Ploter::plot_line(std::shared_ptr&lt;QwtPlotCurve&gt;&amp;myLine, funktion &amp;q ,ploting_range &amp;std, bool show, QPen pen)
{
  std::vector&lt;punkt&lt;double&gt;&gt; fkt_werte = q.werte(std.von, std.bis, std.schrittweite);

  plot_line(myLine, fkt_werte, std, show, pen);
}
</code></pre>
<p>(wobei 'std' ja in der ersten Variante gar nicht als Parameter benutzt wird - und außerdem noch namensgleich mit dem Namespace &quot;std&quot; ist).</p>
<p>PS: Es heißt korrekt &quot;Plotter&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532467</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532467</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Tue, 13 Jun 2017 06:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 08:32:52 GMT]]></title><description><![CDATA[<p>Mal davon abgesehen, dass eine Referenz auf einen shared_ptr ziemlicher Mist ist: dein draw_spline Funktion kann ja offensichtlich auch nicht gleich sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532475</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jun 2017 08:32:52 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 10:48:45 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Mal davon abgesehen, dass eine Referenz auf einen shared_ptr ziemlicher Mist ist</p>
</blockquote>
<p>Ja das war nur ein verzweifelter Versuch...</p>
<p>Th69 schrieb:</p>
<blockquote>
<p>Hast du denn fkt_werte bzw. fkt_werte.size() mal überprüft?</p>
</blockquote>
<p>Ja habe ich, enthält exakt die übergebenen Werte. Auch die QwtPlotCurve enhält intern die übergebenen Punkte.</p>
<p>Habe das ganze jetzt so umgebaut wie TH69 es vorgeschlagen hat, das ich nur noch eine Variante von plot_line habe. Das macht das ganze jetzt aber noch konfuser, denn es hat sich dadurch nichts geändert. Jetzt ist der aufruf von &quot;plot_line&quot; in allen &quot;create_spline&quot; - Methoden gleich. Die create_spline Methode dient als public Funktion dazu den Plotter aufzurufen.</p>
<p>create_spline Varainte 1:</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(std::vector&lt;punkt&lt;double&gt;&gt; points, bool show, QPen pen)
{
	std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
	std::thread t(static_cast&lt;void(Plotter::*)(std::shared_ptr&lt;QwtPlotCurve&gt;, std::vector&lt;punkt&lt;double&gt;&gt;&amp;, bool, QPen)&gt;(&amp;Plotter::plot_line), this, std::ref(myLine), std::ref(points), show, pen);
	t.join();
	return myLine;
}
</code></pre>
<p>create_spline Variante 2:</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(funktion &amp;q, ploting_range &amp;range, bool show, QPen pen) {
	std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
	std::vector&lt;punkt&lt;double&gt;&gt;points = q.werte(range.von, range.bis, range.schrittweite);

	std::thread t(static_cast&lt;void(Plotter::*)(std::shared_ptr&lt;QwtPlotCurve&gt;, std::vector&lt;punkt&lt;double&gt;&gt;&amp;, bool, QPen)&gt;(&amp;Plotter::plot_line), this, std::ref(myLine), std::ref(points), show, pen);
	t.join();
	return myLine;
}
</code></pre>
<p>Damit bleibt für mich nur noch der Aufruf von &quot;create_spline&quot; als Fehlerquelle.<br />
Variante 1 wird so aufgerufen:</p>
<pre><code>void datatable::draw() {
	QColor color = Plotter::randomColor();
	for (punkt&lt;double&gt;&amp;t : m_points) {
		m_plot-&gt;create_point(t.get_x(), t.get_y(),color);
	}

	m_plot-&gt;create_spline(m_points,true,QPen(color,3));
}
</code></pre>
<p>Dabei ist die Klasse &quot;datatable&quot; eine UI für eine Wertetabelle.</p>
<p>Variante 2 wird aus der Klasse des MainWindows heraus aufgerufen</p>
<pre><code>QVariant data;
		data.setValue(plot-&gt;create_spline(function, function.range, true, Plotter::stdPen));
</code></pre>
<p>Dabei wird der shared_ptr&lt;QwtPlotCurve&gt; in einem QVariant gespeichert.</p>
<p>Ich komm einfach nicht drauf wo jetzt der Fehler liegt, denn der aufruf aus der MainWindow-Klasse klappt wunderbar, nur der aus der datatable-Klasse nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532492</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532492</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 10:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 10:56:55 GMT]]></title><description><![CDATA[<p>Wo kommen denn auf einmal die Threads her? Und welchen Sinn macht es, einen Thread zu starten und dann gleich mit join darauf zu warten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532493</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jun 2017 10:56:55 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 11:26:28 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Wo kommen denn auf einmal die Threads her? Und welchen Sinn macht es, einen Thread zu starten und dann gleich mit join darauf zu warten?</p>
</blockquote>
<p>Weil es unterm Strich ein paar ms Laufzeit ausmacht, was sich bei einem just-in-time plotting smother anfühlt.</p>
<p>Es ändert aber nichts. Auch ohne Thread passiert nichts anderes. Also der Fehler ist mit und ohne Thread da.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532497</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 11:26:28 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 11:44:57 GMT]]></title><description><![CDATA[<p>axels. schrieb:</p>
<blockquote>
<p>Weil es unterm Strich ein paar ms Laufzeit ausmacht, was sich bei einem just-in-time plotting smother anfühlt.</p>
</blockquote>
<p>Du startest einen Thread und hältst den andern an - das fühlt sich bestimmt smoother an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532499</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jun 2017 11:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 11:50:11 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>axels. schrieb:</p>
<blockquote>
<p>Weil es unterm Strich ein paar ms Laufzeit ausmacht, was sich bei einem just-in-time plotting smother anfühlt.</p>
</blockquote>
<p>Du startest einen Thread und hältst den andern an - das fühlt sich bestimmt smoother an.</p>
</blockquote>
<p>Das ist doch jetzt nicht das Thema.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532500</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 11:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 12:42:52 GMT]]></title><description><![CDATA[<p>axels. schrieb:</p>
<blockquote>
<p>Das ist doch jetzt nicht das Thema.</p>
</blockquote>
<p>Was hier letztendlich das Thema ist, ist völlig unklar. <strong>Du</strong> führst hier mit jedem Post komplett anderen Code ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532506</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jun 2017 12:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 13:10:04 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>axels. schrieb:</p>
<blockquote>
<p>Das ist doch jetzt nicht das Thema.</p>
</blockquote>
<p>Was hier letztendlich das Thema ist, ist völlig unklar. <strong>Du</strong> führst hier mit jedem Post komplett anderen Code ein.</p>
</blockquote>
<p>Es ist doch wohl klar das man sich dem Fehler stück für Stück nähern muss, und eventuelle Fehlerquellen nach und nach eliminieren muss, deswegen immer wieder anderer Code der aber im zusammenhang mit allem anderen steht.</p>
<p>Also jetzt hier für den manni den aktuellen Stand zusammengefasst:</p>
<p>Zwei Funktionen die sich nur durch ihr Interface unterscheiden liefern verschiedene Ergebnisse.</p>
<p>Variante 1</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(std::vector&lt;punkt&lt;double&gt;&gt; points, bool show, QPen pen)
{
	std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
	plot_line(myLine, points, show, pen);
	return myLine;
}
</code></pre>
<p>Variante 2</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(funktion &amp;q, ploting_range &amp;range, bool show, QPen pen) {
	std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
	std::vector&lt;punkt&lt;double&gt;&gt;points = q.werte(range.von, range.bis, range.schrittweite);
	plot_line(myLine, points,show, pen);
	return myLine;
}
</code></pre>
<p>Beim aufruf von Varainte 2 wird die Kurve gezeichnet, bei Varainte 1 nicht.<br />
Alles war vorher in dem Thread diskutiert wurde ist das was in der Funktion &quot;create_spline&quot; passiert. Da dies jetzt identisch ist, muss der Fehler nicht innerhalb der Funktion liegen. Ich verstehe aber nicht wo! Und genau das ist das aktuelle Thema!<br />
Also nochmals die Frage, was ist falsch das eben jenes Verhalten auftritt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532510</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 13:10:04 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 13:17:23 GMT]]></title><description><![CDATA[<p>Tja, wenn man jetzt wüsste was plot_line macht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532512</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532512</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Tue, 13 Jun 2017 13:17:23 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 13:23:44 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Tja, wenn man jetzt wüsste was plot_line macht ...</p>
</blockquote>
<p>Hier bitte. Da diese in beiden Fällen gleich ist, würde ich in meiner naivität diese als Fehlerquelle ausschließen.</p>
<pre><code>void Plotter::plot_line(std::shared_ptr&lt;QwtPlotCurve&gt;myLine, std::vector&lt;punkt&lt;double&gt;&gt; &amp;points, bool show, QPen pen)
{
	QwtSplineCurveFitter *fitter = new QwtSplineCurveFitter();
	fitter-&gt;setFitMode(QwtSplineCurveFitter::Spline);

	fitter-&gt;setSplineSize(points.size());
	QVector&lt;double&gt; x, y;
	for (size_t i = 0; i &lt; points.size(); i++) {
		x.push_back(points.at(i).get_x());
		y.push_back(points.at(i).get_y());
	}

	myLine-&gt;setSamples(x, y);
	myLine-&gt;setRenderHint(QwtPlotCurve::RenderAntialiased);
	myLine-&gt;setCurveFitter(fitter);

	draw_spline(myLine, pen, show);
}
</code></pre>
<p>Für den Falls das du &quot;draw_spline&quot; auch noch sehen willst<br />
Hier bitte:</p>
<pre><code>void Plotter::draw_spline(std::shared_ptr&lt;QwtPlotCurve&gt;myLine,QPen pen, bool show) {
	myLine-&gt;setPen(pen);
	myLine-&gt;attach(plot.get());
	myLine-&gt;setVisible(show);
	plot-&gt;replot();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2532513</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532513</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 13:23:44 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 13:58:01 GMT]]></title><description><![CDATA[<p>Prüfe doch einmal, ob die Eingangsdaten in Variante 1</p>
<pre><code>std::vector&lt;punkt&lt;double&gt;&gt; points
</code></pre>
<p>identisch zu denen sind, die dieser Aufruf liefert:</p>
<pre><code>std::vector&lt;punkt&lt;double&gt;&gt;points = q.werte(range.von, range.bis, range.schrittweite);
</code></pre>
<p>Mir scheint, dass dieser Aufruf nicht das liefert, was du haben möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532517</guid><dc:creator><![CDATA[_foobar_]]></dc:creator><pubDate>Tue, 13 Jun 2017 13:58:01 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 14:25:34 GMT]]></title><description><![CDATA[<p><em>foobar</em> schrieb:</p>
<blockquote>
<p>Mir scheint, dass dieser Aufruf nicht das liefert, was du haben möchtest.</p>
</blockquote>
<p>Doch genau das tut er. Wenn ich mir die Daten im vector anschaue finde ich exakt die ich eingeben habe. Das ist es ja was mich so verrückt macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532520</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 14:25:34 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 14:59:11 GMT]]></title><description><![CDATA[<p>Was passiert denn, wenn du aus Variante 2, Variante 1 aufrufst? Also sowas:</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(funktion &amp;q, ploting_range &amp;range, bool show, QPen pen) {
    std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
    std::vector&lt;punkt&lt;double&gt;&gt;points = q.werte(range.von, range.bis, range.schrittweite);
    return create_spline(points, show, pen);
}
</code></pre>
<p>Dann würdest du in Variante 1 garantiert den selben Vector benutzen, den du sonst in Variante 2 verwendet hast.</p>
<p>Edit: Gibt es einen Grund, dass du in create_spline keine Referenz auf den Vektor übergibst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532527</guid><dc:creator><![CDATA[Schlangenmensch]]></dc:creator><pubDate>Tue, 13 Jun 2017 14:59:11 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 18:32:14 GMT]]></title><description><![CDATA[<p>Schlangenmensch schrieb:</p>
<blockquote>
<p>Was passiert denn, wenn du aus Variante 2, Variante 1 aufrufst?</p>
</blockquote>
<p>Dann tritt ebenfalls der Fehler auf.<br />
Dennoch weiß ich jetzt noch nicht woran es liegt.<br />
Demnach muss es irgendwo in der Funktion</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(std::vector&lt;punkt&lt;double&gt;&gt;&amp; points, bool show, QPen pen)
{
	std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
	plot_line(myLine, points, show, pen);
	return myLine;
}
</code></pre>
<p>ein Problem geben, aber welches?</p>
<p>Schlangenmensch schrieb:</p>
<blockquote>
<p>Edit: Gibt es einen Grund, dass du in create_spline keine Referenz auf den Vektor<br />
übergibst?</p>
</blockquote>
<p>Keinen expliziten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532546</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 18:32:14 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 20:01:46 GMT]]></title><description><![CDATA[<p>Wie sieht denn <code>QwtPlotCurve::setSamples</code> aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532550</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 13 Jun 2017 20:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Tue, 13 Jun 2017 22:45:36 GMT]]></title><description><![CDATA[<p><a href="http://qwt.sourceforge.net/class_qwt_plot_curve.html#aa51cd3fa00f2a046ca5a9889c5db2413" rel="nofollow">http://qwt.sourceforge.net/class_qwt_plot_curve.html#aa51cd3fa00f2a046ca5a9889c5db2413</a></p>
<p>Gibt es drei überladene Funktionen, in meinem Fall wird die zweite Verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532563</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Tue, 13 Jun 2017 22:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 06:19:56 GMT]]></title><description><![CDATA[<p>hustbaer  schrieb:</p>
<blockquote>
<p>Wie sieht denn QwtPlotCurve::setSamples aus?</p>
</blockquote>
<p>Ich bin der Meinung, es spielt überhaupt keine Rolle, was in <code>plotLine</code> oder noch tiefer in <code>setSamples</code> passiert.</p>
<p>axels. schrieb:</p>
<blockquote>
<p>Variante 1</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(std::vector&lt;punkt&lt;double&gt;&gt; points, bool show, QPen pen)
{
    std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
    plot_line(myLine, points, show, pen);
    return myLine;
}
</code></pre>
<p>Variante 2</p>
<pre><code>std::shared_ptr&lt;QwtPlotCurve&gt; Plotter::create_spline(funktion &amp;q, ploting_range &amp;range, bool show, QPen pen) {
    std::shared_ptr&lt;QwtPlotCurve&gt;myLine(new QwtPlotCurve(QString(&quot;&quot;)));
    std::vector&lt;punkt&lt;double&gt;&gt;points = q.werte(range.von, range.bis, range.schrittweite);
    plot_line(myLine, points,show, pen);
    return myLine;
}
</code></pre>
</blockquote>
<p><code>plot_line</code> bekommt 4 parameter. Aus deinem Post geht hervor, dass der erste ( <code>myLine</code> ) bei beiden identisch ist, weil innerhalb von <code>create_spline</code> identisch erzeugt. Wenn die beiden Varianten mit demselben <code>show</code> und demselben <code>pen</code> aufgerufen werden, kann der Fehler doch nur beim Parameter <code>points</code> liegen.</p>
<p>Ich bleibe dabei: stelle sicher, dass die 4 Parameter, die plot_line nimmt bei beiden Aufrufen identisch sind, dann muss auch dasselbe rauskommen. (Ist vielleicht beim einen Aufruf, bei dem kein Plot angezeigt wird, <code>show == false</code> ...?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532566</guid><dc:creator><![CDATA[_foobar_]]></dc:creator><pubDate>Wed, 14 Jun 2017 06:19:56 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 06:49:40 GMT]]></title><description><![CDATA[<p>axels. schrieb:</p>
<blockquote>
<p>Keinen expliziten...</p>
</blockquote>
<p>Hast du es denn mal mit der Referenz versucht? (Ich wollte nur ausschließen, dass mit dem Copy ctor von &quot;punkt&quot; etwas nicht stimmt.)</p>
<p>Ansonsten wäre evt. dann tatächlich die Implementation von punkt Interessant und wie die übergebene Funktion q, bzw. q.werte(....) aussieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532567</guid><dc:creator><![CDATA[Schlangenmensch]]></dc:creator><pubDate>Wed, 14 Jun 2017 06:49:40 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 09:08:56 GMT]]></title><description><![CDATA[<p><em>foobar</em> schrieb:</p>
<blockquote>
<p>hustbaer  schrieb:</p>
<blockquote>
<p>Wie sieht denn QwtPlotCurve::setSamples aus?</p>
</blockquote>
<p>Ich bin der Meinung, es spielt überhaupt keine Rolle, was in <code>plotLine</code> oder noch tiefer in <code>setSamples</code> passiert.</p>
</blockquote>
<p>Na, schön für dich.</p>
<p>Ich wollte einfach wissen ob setSamples ne &quot;deep copy&quot; macht. Tut es. Damit ist es OK. Täte es das nicht, hätte es der Grund für den Fehler sein können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532580</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 14 Jun 2017 09:08:56 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 09:13:58 GMT]]></title><description><![CDATA[<p><em>foobar</em> schrieb:</p>
<blockquote>
<p><code>plot_line</code> bekommt 4 parameter. Aus deinem Post geht hervor, dass der erste ( <code>myLine</code> ) bei beiden identisch ist, weil innerhalb von <code>create_spline</code> identisch erzeugt. Wenn die beiden Varianten mit demselben <code>show</code> und demselben <code>pen</code> aufgerufen werden, kann der Fehler doch nur beim Parameter <code>points</code> liegen.</p>
<p>Ich bleibe dabei: stelle sicher, dass die 4 Parameter, die plot_line nimmt bei beiden Aufrufen identisch sind, dann muss auch dasselbe rauskommen. (Ist vielleicht beim einen Aufruf, bei dem kein Plot angezeigt wird, <code>show == false</code> ...?)</p>
</blockquote>
<p>Selbst wenn ich beide Funktionen direkt hintereinander aufrufe, mit den selben Parmetern tritt der Fehler auf.</p>
<p>Schlangenmensch schrieb:</p>
<blockquote>
<p>Hast du es denn mal mit der Referenz versucht? (Ich wollte nur ausschließen, dass mit dem Copy ctor von &quot;punkt&quot; etwas nicht stimmt.)</p>
</blockquote>
<p>Ja habe ich versucht. Hat nichts gebracht.</p>
<p>Schlangenmensch schrieb:</p>
<blockquote>
<p>Ansonsten wäre evt. dann tatächlich die Implementation von punkt Interessant und wie die übergebene Funktion q, bzw. q.werte(....) aussieht.</p>
</blockquote>
<p>punkt ist wie folgt implementiert:</p>
<pre><code>template&lt;typename T&gt;
class punkt
{
public:
	punkt() :m_x(0), m_y(0) {};
	punkt(T x,T y){
		m_x = x;
		m_y = y;
	}
	punkt(std::string &amp;v) {
		int o_brack = v.find(&quot;(&quot;);
		int mid = v.find(&quot;|&quot;);
		int c_brack = v.find(&quot;)&quot;);
		try
		{
			m_x = T(std::stod(v.substr(o_brack + 1, (o_brack + 1 - mid))));
			m_y = T(std::stod(v.substr(mid + 1, (mid + 1 - c_brack))));
		}
		catch (const std::invalid_argument&amp;)
		{
			throw std::exception(&quot;Error! Invalid Expression&quot;);

		}
		catch (const std::out_of_range &amp;) {
			throw std::exception(&quot;Error! Invalid Expression&quot;);
		}
	}
	T&amp; get_x() {
		return m_x;
	}
	T&amp; get_y() {
		return m_y;
	}

	T get_x() const {
		return m_x;
	}
	T get_y() const  {
		return m_y;
	} 

	T Round(T Zahl, int Stellen);

	static bool compare_x(const punkt&amp; first, const punkt&amp; second) {
		return first.get_x() &lt; second.get_x();
	}

	bool operator!=(const punkt &amp;rhs);
	bool operator==(const punkt&amp; rhs);

	std::string to_string();
	template&lt;typename T&gt;
	friend std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, const punkt&lt;T&gt; &amp;a);
	template&lt;typename T&gt;
	friend std::istream &amp;operator&gt;&gt;(std::istream &amp;istr, punkt&lt;T&gt; &amp;a);

	virtual ~punkt() {}
protected:
	T m_x, m_y;

	void set_x(T t) {
		m_x = t;
	}
	void set_y(T t) {
		m_y = t;
	}

};

template&lt;typename T&gt;
inline T punkt&lt;T&gt;::Round(T Zahl, int Stellen)
{
	double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11,1e12,1e13,1e14,1e15,1e16,1e17 };  // mgl. verlängern 
	return floor(Zahl * v[Stellen] + 0.5) / v[Stellen];
}

template&lt;typename T&gt;
inline bool punkt&lt;T&gt;::operator!=(const punkt &amp;rhs) {
	if (rhs.get_x() == get_x())
		if (rhs.get_y() == get_y())
			return false;
		else
			return true;
	else
		return true;
}

template&lt;typename T&gt;
inline bool punkt&lt;T&gt;::operator==(const punkt &amp;rhs) {
	if (rhs.get_x() == get_x())
		if (rhs.get_y() == get_y())
			return true;
		else
			return false;
	else
		return false;
}

template&lt;typename T&gt;
inline std::ostream &amp;operator&lt;&lt;(std::ostream &amp;ostr, const punkt&lt;T&gt; &amp;a) {
	ostr &lt;&lt; &quot;(&quot; &lt;&lt; a.get_x() &lt;&lt; &quot;|&quot; &lt;&lt; a.get_y() &lt;&lt; &quot;)\n&quot;;
	return ostr;
}

template&lt;typename T&gt;
inline std::istream &amp;operator &gt;&gt; (std::istream &amp;istr, punkt&lt;T&gt; &amp;a) {
	std::string tmp; 
	std::getline(istr, tmp, '\n');
	a = punkt&lt;T&gt;(tmp);
	return istr;
}
template&lt;typename T&gt;
inline std::string punkt&lt;T&gt;::to_string() {
	return std::string(&quot;(&quot; + boost::lexical_cast&lt;std::string&gt;(get_x()) + &quot;|&quot; + boost::lexical_cast&lt;std::string&gt;(get_y()) + &quot;)\n&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2532585</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532585</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Wed, 14 Jun 2017 09:13:58 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 14:58:56 GMT]]></title><description><![CDATA[<p>Ich habe jetzt noch versucht einem temporären &quot;funktion&quot;-Objekt die Punkte zuzuweißen um die Variante mit dem &quot;funktion&quot;-Objekt als Parameter zu verwenden.<br />
Ergebniss: Der selbe Fehler tritt immernoch auf.</p>
<p>Langsam wird's echt seltsam.</p>
<p>Hat noch jemand eine Idee?<br />
Evtl. die Gegebenheiten des Aufrufers?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532620</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Wed, 14 Jun 2017 14:58:56 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 15:03:45 GMT]]></title><description><![CDATA[<p>Prinzipiell ein minimales aber kompilierbares Beispiel bei dem der Fehler auftritt. Damit man alles zusammen hat, wo der Fehler liegen kann und sich das mal selbst im Compiler / Debugger anschauen kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532623</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532623</guid><dc:creator><![CDATA[Schlangenmensch]]></dc:creator><pubDate>Wed, 14 Jun 2017 15:03:45 GMT</pubDate></item><item><title><![CDATA[Reply to Gleiche Funktion mit verschiedenem Interface liefert unterschiedliche Ergebnisse on Wed, 14 Jun 2017 19:07:18 GMT]]></title><description><![CDATA[<p>Schlangenmensch schrieb:</p>
<blockquote>
<p>Prinzipiell ein minimales aber kompilierbares Beispiel bei dem der Fehler auftritt. Damit man alles zusammen hat, wo der Fehler liegen kann und sich das mal selbst im Compiler / Debugger anschauen kann.</p>
</blockquote>
<p>Ich weiß schon, nur um ein kompilierbares Beispiel wird hier sehr schnell sehr groß, weil einfach ein rießen Ratenschwanz hinten dran hängt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2532639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2532639</guid><dc:creator><![CDATA[axels.]]></dc:creator><pubDate>Wed, 14 Jun 2017 19:07:18 GMT</pubDate></item></channel></rss>