<html>
<head>
<meta content="text/html; charset=windows-1252"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">Using g++ 4.8.3, if you delete<br>
typedef Scalar value_type;<br>
at line 24 of<br>
<a class="moz-txt-link-freetext" href="https://projects.coin-or.org/CppAD/browser/trunk/cppad/example/eigen_plugin.hpp">https://projects.coin-or.org/CppAD/browser/trunk/cppad/example/eigen_plugin.hpp</a><br>
the error in compiling the example below goes away.<br>
<br>
CppAD expects <br>
Vector::value_type<br>
to be the type of the elements of a vector; see<br>
<a class="moz-txt-link-freetext" href="http://www.coin-or.org/CppAD/Doc/simplevector.xml#Value%20Type">http://www.coin-or.org/CppAD/Doc/simplevector.xml#Value%20Type</a><br>
<br>
This is the same as for the C++ standard vector; as can be seen by
searching for value_type on<br>
<a class="moz-txt-link-freetext" href="http://www.cplusplus.com/reference/vector/vector/">http://www.cplusplus.com/reference/vector/vector/</a><br>
<br>
I wanted to ask about this on the eigen user's list<br>
<a class="moz-txt-link-freetext" href="http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2014/12/maillist.html">http://listengine.tuxfamily.org/lists.tuxfamily.org/eigen/2014/12/maillist.html</a><br>
but I did not see your posting there.<br>
<br>
Brad<br>
<br>
<br>
On 12/17/2014 11:33 AM, Braun, Michael wrote:<br>
</div>
<blockquote cite="mid:C1E0B23C-F1A1-4C5B-9647-1FEBDEE26E44@smu.edu"
type="cite">
<meta http-equiv="Context-Type" content="text/html;
charset=us-ascii">
<div class="">I posted this same question on the Eigen forum
because I do not know if it is really an Eigen issue or a CppAD
issue.</div>
<div class=""><br class="">
</div>
<div class="">As part of a larger application that uses CppAD, I
am trying to fill an Eigen sparse matrix. The following MWE
does not use CppAD, and when the first line (#define
EIGEN_MATRIX_PLUGIN ... ) is commented out, this code runs fine.
</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">
<div class="">#define EIGEN_MATRIX_PLUGIN
<cppad/example/eigen_plugin.hpp></div>
<div class=""><br class="">
</div>
<div class="">#include <Eigen/Eigen></div>
<div class="">#include <Eigen/Sparse></div>
<div class="">#include <cppad/cppad.hpp></div>
<div class="">#include <cppad/example/cppad_eigen.hpp></div>
<div class=""><br class="">
</div>
<div class="">void triptest () {</div>
<div class=""> typedef Eigen::Triplet<double> TT;</div>
<div class=""><br class="">
</div>
<div class=""> int n = 5;</div>
<div class=""> std::vector<TT> trips; </div>
<div class=""> Eigen::SparseMatrix<double> M(n,n);</div>
<div class=""> </div>
<div class=""> for (int i=0; i<n; i++) { </div>
<div class=""> trips.push_back (TT(i,i,i*i));</div>
<div class=""> }</div>
<div class=""> M.setFromTriplets(trips.begin(), trips.end());</div>
<div class=""> std::cout << M << "\n";</div>
<div class=""> </div>
<div class="">}</div>
<div class=""><br class="">
</div>
<div class="">int main (void)</div>
<div class="">{ </div>
<div class=""> triptest();</div>
<div class=""> return 0;</div>
<div class="">}</div>
</div>
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class="">But when left in, I get the following compile error:</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">
$ clang++ -I/opt/cppad/include
-I$R_HOME/library/RcppEigen/include trips.cpp -o trips.so</div>
<div class="">
In file included from trips.cpp:4:</div>
<div class="">
In file included from .../Eigen/Sparse:19:</div>
<div class="">
In file included from .../Eigen/SparseCore:40:</div>
<div class="">
<b class="">/Library/Frameworks/R.framework/Resources/library/RcppEigen/include/Eigen/src/SparseCore/SparseMatrix.h:957:11:
</b><span class=""><b class="">error: </b></span></div>
<div class="">
<b class=""> call to member function 'reserve' is
ambiguous</b></div>
<div class="">
trMat.reserve(wi);</div>
<div class="">
<b class=""> ~~~~~~^~~~~~~</b></div>
<div class="">
<b class="">.../Eigen/src/SparseCore/SparseMatrix.h:1013:13:
note: </b></div>
<div class="">
in instantiation of function template specialization</div>
<div class="">
'Eigen::internal::set_from_triplets<std::__1::__wrap_iter<Eigen::Triplet<double,
int> *>,</div>
<div class="">
Eigen::SparseMatrix<double, 0, int> >'
requested here</div>
<div class="">
internal::set_from_triplets(begin, end, *this);</div>
<div class="">
<b class=""> ^</b></div>
<div class="">
<b class="">trips.cpp:18:5: note: </b>in instantiation of
function template specialization
'Eigen::SparseMatrix<double, 0,</div>
<div class="">
int>::setFromTriplets<std::__1::__wrap_iter<Eigen::Triplet<double,
int> *> >' requested here</div>
<div class="">
M.setFromTriplets(trips.begin(), trips.end());</div>
<div class="">
<b class=""> ^</b></div>
<div class="">
<b class="">.../Eigen/src/SparseCore/SparseMatrix.h:270:17:
note: </b></div>
<div class="">
candidate function [with SizesType =
Eigen::Matrix<int, -1, 1, 0, -1, 1>]</div>
<div class="">
inline void reserve(const SizesType& reserveSizes,
const typename SizesType::value_type& enableif =
typenam...</div>
<div class="">
<b class=""> ^</b></div>
<div class="">
<b class="">.../Eigen/src/SparseCore/SparseMatrix.h:276:17:
note: </b></div>
<div class="">
candidate function [with SizesType =
Eigen::Matrix<int, -1, 1, 0, -1, 1>]</div>
<div class="">
inline void reserve(const SizesType& reserveSizes,
const typename SizesType::Scalar& enableif =</div>
<div class="">
<b class=""> ^</b></div>
<div class="">
<b class="">.../Eigen/src/SparseCore/SparseMatrix.h:256:17:
note: </b></div>
<div class="">
candidate function not viable: no known conversion from
'Matrix<Index, Dynamic, 1>' to 'Index' (aka 'int') for
1st</div>
<div class="">
argument</div>
<div class="">
inline void reserve(Index reserveSize)</div>
<div class="">
<b class=""> ^</b></div>
</div>
<div class=""><b class=""><br class="">
</b></div>
<div class=""><br class="">
</div>
<div class="">Any idea what's going on? I have been able to
narrow the problem directly to that first #define. Also, this
appears to happen only with EIGEN_MATRIX_PLUGIN, and not ARRAY
or SPARSEMATRIX.</div>
<div class=""><br class="">
</div>
<div class="">Thanks,</div>
<div class=""><br class="">
</div>
<div class="">Michael</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<div class=""><br class="">
</div>
<br class="">
<div class="">
<div class="">--------------------------</div>
<div class="">Michael Braun</div>
<div class="">Associate Professor of Marketing</div>
<div class="">Cox School of Business</div>
<div class="">Southern Methodist University</div>
<div class="">Dallas, TX 75275</div>
<div class=""><a moz-do-not-send="true"
href="mailto:braunm@smu.edu" class="">braunm@smu.edu</a></div>
<div class=""><br class="">
</div>
<br class="Apple-interchange-newline">
</div>
<br class="">
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
CppAD mailing list
<a class="moz-txt-link-abbreviated" href="mailto:CppAD@list.coin-or.org">CppAD@list.coin-or.org</a>
<a class="moz-txt-link-freetext" href="http://list.coin-or.org/mailman/listinfo/cppad">http://list.coin-or.org/mailman/listinfo/cppad</a>
</pre>
</blockquote>
<br>
</body>
</html>