<?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[Überladungsauflösung nicht möglich wegen const oder *__w64 ?]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes gekürztes Beispiel aus der OpenCV:</p>
<pre><code class="language-cpp">#include &lt;cv.h&gt;
#include &lt;highgui.h&gt;
using namespace cv;
int main( int argc, char** argv )
{

    Mat hsv;
    int hbins = 30, sbins = 32;
    int histSize[] = {hbins, sbins};
    float hranges[] = { 0, 180 };
    float sranges[] = { 0, 256 };
    float* ranges[] = { hranges, sranges };
    MatND hist;
    int channels[] = {0, 1};

    calcHist( &amp;hsv, 1, channels, Mat(), // do not use mask
        hist, 2, histSize, ranges,
        true, // the histogram is uniform
        false );
}
</code></pre>
<p>Erzeugt mit VC2005 folgenden Fehler:</p>
<pre><code>d:\...\histogramm.cpp(27) : error C2665: &quot;cv::calcHist&quot;: Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.
1&gt;        c:\bibliotheken\opencv2.1.0\include\opencv\cv.hpp(412): kann 'void cv::calcHist(const cv::Mat *,int,const int *,const cv::Mat &amp;,cv::MatND &amp;,int,const int *,const float **,bool,bool)' sein
1&gt;        c:\bibliotheken\opencv2.1.0\include\opencv\cv.hpp(418): oder &quot;void cv::calcHist(const cv::Mat *,int,const int *,const cv::Mat &amp;,cv::SparseMat &amp;,int,const int *,const float **,bool,bool)&quot;
1&gt;        bei Anpassung der Argumentliste '(cv::Mat *__w64 , int, int [2], cv::Mat, cv::MatND, int, int [2], float *[2], bool, bool)'
</code></pre>
<p>Die erste Überladung sollte eigentlich perfekt passen. Mir ist nicht klar, warum das nicht funktioniert. Liegt es am fehlendem const, oder an den merkwürdigen &quot;*__w64&quot; die der Compiler in die Argumentliste einfügt? Ich baue für 32 Bit. Mit einem explizitem <strong>cast</strong> kann ich den Compilerfehler beseitigen.</p>
<pre><code class="language-cpp">calcHist( (const Mat*)&amp;hsv, 1, (const int*)&amp;channels[0], Mat(), hist, 2, (const int*)&amp;histSize[0], (const float**)&amp;ranges[0],
        true, // the histogram is uniform
        false );
</code></pre>
<p>Kann der <strong>cast</strong> noch andere gefährliche Folgen haben?</p>
<p>Das Original OpenCV-Beispiel findet man unter:<br />
<a href="http://opencv.willowgarage.com/documentation/cpp/histograms.html?highlight=calchist#calcHist" rel="nofollow">http://opencv.willowgarage.com/documentation/cpp/histograms.html?highlight=calchist#calcHist</a></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/265247/überladungsauflösung-nicht-möglich-wegen-const-oder-__w64</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 07:49:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/265247.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 20 Apr 2010 07:46:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 07:46:08 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>folgendes gekürztes Beispiel aus der OpenCV:</p>
<pre><code class="language-cpp">#include &lt;cv.h&gt;
#include &lt;highgui.h&gt;
using namespace cv;
int main( int argc, char** argv )
{

    Mat hsv;
    int hbins = 30, sbins = 32;
    int histSize[] = {hbins, sbins};
    float hranges[] = { 0, 180 };
    float sranges[] = { 0, 256 };
    float* ranges[] = { hranges, sranges };
    MatND hist;
    int channels[] = {0, 1};

    calcHist( &amp;hsv, 1, channels, Mat(), // do not use mask
        hist, 2, histSize, ranges,
        true, // the histogram is uniform
        false );
}
</code></pre>
<p>Erzeugt mit VC2005 folgenden Fehler:</p>
<pre><code>d:\...\histogramm.cpp(27) : error C2665: &quot;cv::calcHist&quot;: Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.
1&gt;        c:\bibliotheken\opencv2.1.0\include\opencv\cv.hpp(412): kann 'void cv::calcHist(const cv::Mat *,int,const int *,const cv::Mat &amp;,cv::MatND &amp;,int,const int *,const float **,bool,bool)' sein
1&gt;        c:\bibliotheken\opencv2.1.0\include\opencv\cv.hpp(418): oder &quot;void cv::calcHist(const cv::Mat *,int,const int *,const cv::Mat &amp;,cv::SparseMat &amp;,int,const int *,const float **,bool,bool)&quot;
1&gt;        bei Anpassung der Argumentliste '(cv::Mat *__w64 , int, int [2], cv::Mat, cv::MatND, int, int [2], float *[2], bool, bool)'
</code></pre>
<p>Die erste Überladung sollte eigentlich perfekt passen. Mir ist nicht klar, warum das nicht funktioniert. Liegt es am fehlendem const, oder an den merkwürdigen &quot;*__w64&quot; die der Compiler in die Argumentliste einfügt? Ich baue für 32 Bit. Mit einem explizitem <strong>cast</strong> kann ich den Compilerfehler beseitigen.</p>
<pre><code class="language-cpp">calcHist( (const Mat*)&amp;hsv, 1, (const int*)&amp;channels[0], Mat(), hist, 2, (const int*)&amp;histSize[0], (const float**)&amp;ranges[0],
        true, // the histogram is uniform
        false );
</code></pre>
<p>Kann der <strong>cast</strong> noch andere gefährliche Folgen haben?</p>
<p>Das Original OpenCV-Beispiel findet man unter:<br />
<a href="http://opencv.willowgarage.com/documentation/cpp/histograms.html?highlight=calchist#calcHist" rel="nofollow">http://opencv.willowgarage.com/documentation/cpp/histograms.html?highlight=calchist#calcHist</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885526</guid><dc:creator><![CDATA[dJohn@work]]></dc:creator><pubDate>Tue, 20 Apr 2010 07:46:08 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 07:57:49 GMT]]></title><description><![CDATA[<p>dJohn@work schrieb:</p>
<blockquote>
<p>Kann der <strong>cast</strong> noch andere gefährliche Folgen haben?</p>
</blockquote>
<p>So wie du ihn benutzt kann der Cast alles mögliche machen, auch etwas, was du dir vielleicht nicht vorstellst. Benutze nach Möglichkeit immer C++ Casts statt des C-Style Cast. versuch mal, einen static_cast auf deine ganzen Pointer anzuwenden. Wo das __w64 herkommt ist mir schleierhaft, frag am Besten mal im Compilerforum nach. Vielleicht hast du da irgendwelche Compilereinstellungen falsch gesetzt.</p>
<p>Btw: eine Funktion mit 9(!) Argumenten wäre für mich schon ein erster Hinweis darauf, dass ich mich ggf. nach einer anderen Bibliothek umschauen sollte *schauder*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885532</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 20 Apr 2010 07:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 08:07:17 GMT]]></title><description><![CDATA[<p>Sing sogar 10.<br />
Die WinAPI geizt auch nicht mit Parametern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885536</guid><dc:creator><![CDATA[FrEEzE2046]]></dc:creator><pubDate>Tue, 20 Apr 2010 08:07:17 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 08:08:53 GMT]]></title><description><![CDATA[<p>Danke Pumuckl,</p>
<p>ich hab jetzt in den Compilereinstellungen &quot;nach 64 Bit Portabilitätsproblemen suchen&quot; abgeschaltet. Damit ist das &quot;__w64&quot; weg. Der Fehler bleibt der gleiche.</p>
<pre><code>d:\development\testsource\opencvbasis\histogramm\histogramm.cpp(27) : error C2665: &quot;cv::calcHist&quot;: Durch keine der 2 Überladungen konnten alle Argumenttypen konvertiert werden.
1&gt;        c:\bibliotheken\opencv2.1.0\include\opencv\cv.hpp(412): kann 'void cv::calcHist(const cv::Mat *,int,const int *,const cv::Mat &amp;,cv::MatND &amp;,int,const int *,const float **,bool,bool)' sein
1&gt;        c:\bibliotheken\opencv2.1.0\include\opencv\cv.hpp(418): oder &quot;void cv::calcHist(const cv::Mat *,int,const int *,const cv::Mat &amp;,cv::SparseMat &amp;,int,const int *,const float **,bool,bool)&quot;
1&gt;        bei Anpassung der Argumentliste '(cv::Mat *, int, int [2], cv::Mat, cv::MatND, int, int [2], float *[2], bool, bool)'
</code></pre>
<p>Statt mit dem C-Cast geht es auch mit const_cast, trotzdem ist mir schleierhaft, wozu ich den überhaupt brauche?</p>
<pre><code class="language-cpp">calcHist( const_cast&lt;const Mat*&gt;(&amp;hsv), 1, const_cast&lt;const int*&gt;(channels), Mat(), // do not use mask
        hist, 2, const_cast&lt;const int*&gt;(histSize), const_cast&lt;const float**&gt;(ranges),
        true, // the histogram is uniform
        false );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1885538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885538</guid><dc:creator><![CDATA[dJohn@work]]></dc:creator><pubDate>Tue, 20 Apr 2010 08:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 10:36:42 GMT]]></title><description><![CDATA[<p>ein T** kann nicht implizit in ein const T** konvertiert werden. Andernfalls würde die const-Korrektheit nicht gewahrt bleiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885624</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 20 Apr 2010 10:36:42 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 14:23:17 GMT]]></title><description><![CDATA[<p>Stimmt,</p>
<p>dann ist das const_cast&lt;&gt; nur für den ranges-Parameter nötig. Bei den anderen Parametern kann ich auf den Cast verzichten.</p>
<p>Danke<br />
DJohn</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885759</guid><dc:creator><![CDATA[dJohn@work]]></dc:creator><pubDate>Tue, 20 Apr 2010 14:23:17 GMT</pubDate></item><item><title><![CDATA[Reply to Überladungsauflösung nicht möglich wegen const oder *__w64 ? on Tue, 20 Apr 2010 14:45:35 GMT]]></title><description><![CDATA[<p>Das sieht wie ein Fehler in der Schnittstellenspezifikation aus. Der Paramter sollte eher</p>
<pre><code class="language-cpp">const float* const* ranges
</code></pre>
<p>heißen. Dann ist auch kein Cast notwendig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1885771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1885771</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Tue, 20 Apr 2010 14:45:35 GMT</pubDate></item></channel></rss>