<div dir="ltr"><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">Dear all, I have posted this few days ago, can anybody helps me with this compilation error ?  I think I understand the valid method, but do not have idea why there is no matching function... It is from Romain's example - <a href="http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html" style="font-family:arial;font-size:small" target="_blank">http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html</a>. I have attached the output of the compiling errors.</div>

<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">Thanks a bunch !</div>
<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">


#include <Rcpp.h></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">using namespace Rcpp;<br>using namespace std;</div>


<div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br></div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">class Randomizer {<br>public:</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">


     Randomizer(){}</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">        NumericVector get( int n ){<br>                RNGScope scope ;<br>                return runif( n, 0.0, 1.0 );<br>        }</div>


<div style="font-family:arial,sans-serif;font-size:19.2000007629395px">        List get( IntegerVector n ){<br>                RNGScope scope ;<br>                int size = n.size() ;<br>                List res( size) ;<br>


                for( int i=0; i<size; i++){<br>                    res[i] = runif(n[i] , 0.0, 1.0 ) ;<br>                }<br>                return res ;<br>        }</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">


} ;</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">bool get_int_valid(SEXP* args, int nargs){<br>     if( nargs != 1 ) return false ;<br>     if( TYPEOF(args[0]) != INTSXP ) return false ;<br>


     return ( LENGTH(args[0]) == 1 ) ;<br>}</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">RCPP_MODULE(mod){</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">        using namespace Rcpp;</div>


<div style="font-family:arial,sans-serif;font-size:19.2000007629395px">        class_<Randomizer>( "Randomizer" )</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px">            .default_constructor()</div>


<div style="font-family:arial,sans-serif;font-size:19.2000007629395px">                .method( "get" , ( NumericVector (Randomizer::*)(int) )(&Randomizer::get) , &get_int_valid ) <br>                .method( "get" , ( List (Randomizer::*)(IntegerVector) )(&Randomizer::get) ) <br>


                ;</div><div style="font-family:arial,sans-serif;font-size:19.2000007629395px"><br>}</div><div><br></div><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Chaomei Lo</b> <span dir="ltr"><<a href="mailto:chaomeilo@gmail.com" target="_blank">chaomeilo@gmail.com</a>></span><br>


Date: Sat, Aug 23, 2014 at 12:51 PM<br>Subject: Compilation errors on overloaded methods in modules - one with dispatch based on the arguments<br>To: "<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-project.org</a>" <<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-project.org</a>><br>


<br><br><div dir="ltr"><div>Hi, Romain,</div><div><br></div><div>I have created overloaded methods have argument types like blow.</div><div><br></div><div>fn(List)</div><div>fn(List, NumericMatrix)</div><div>fn(List, DataFrame)</div>



<div><br></div><div>The first function works fine, and adding the second one with different number of arguments works fine too. With the third one added, it compiled fine but when I invoked the third function I got the error message : "Error: not compatible with requested type". </div>



<div><br></div><div>Then I review your webpage (<a href="http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html" target="_blank">http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-November/001326.html</a>) about the overloaded methods in modules, I tested the following code, but I got a huge of errors output when I compiled it.  Not only compilation failure,  also I do not quite understand this example using dispatch.  Do you think it is possible to achieve the goal of overloaded methods described above using Rcpp ?</div>



<div><br></div><div>#include <Rcpp.h></div><div><br></div><div>using namespace Rcpp;<br>using namespace std;</div><div><br></div><div>class Randomizer {<br>public:</div><div>     Randomizer(){}</div><div>        NumericVector get( int n ){<br>



                RNGScope scope ;<br>                return runif( n, 0.0, 1.0 );<br>        }</div><div>        List get( IntegerVector n ){<br>                RNGScope scope ;<br>                int size = n.size() ;<br>



                List res( size) ;<br>                for( int i=0; i<size; i++){<br>                    res[i] = runif(n[i] , 0.0, 1.0 ) ;<br>                }<br>                return res ;<br>        }</div><div>} ;</div>



<div>bool get_int_valid(SEXP* args, int nargs){<br>     if( nargs != 1 ) return false ;<br>     if( TYPEOF(args[0]) != INTSXP ) return false ;<br>     return ( LENGTH(args[0]) == 1 ) ;<br>}</div><div>RCPP_MODULE(mod){</div>



<div>        using namespace Rcpp;</div><div>        class_<Randomizer>( "Randomizer" )</div><div>            .default_constructor()</div><div>                .method( "get" , ( NumericVector (Randomizer::*)(int) )(&Randomizer::get) , &get_int_valid ) <br>



                .method( "get" , ( List (Randomizer::*)(IntegerVector) )(&Randomizer::get) ) <br>                ;</div><div><br>}</div><div><br></div><div>Thanks a lot.</div><span><font color="#888888"><div>


Chaomei</div></font></span></div>
</div><br></div>