[CLN-list] fixing undefined references
Michael Miller
millermj at lemoyne.edu
Thu Mar 27 21:26:26 CET 2014
On 03/26/2014 04:50 PM, Richard B. Kreckel wrote:
> Michael,
>
> On 03/26/2014 06:35 PM, Michael Miller wrote:
>> I've spent 5 hours trying to understand the reason for an undefined
>> reference, so I'm asking for some help.
>>
>> The code
>>
>> --------------------
>> #include <cstdlib>
>> #include <gmp.h>
>> #include <cln/cln.h>
>>
>> using namespace std;
>> using namespace cln;
>>
>> const cl_univpoly_complex_ring CZ = find_univpoly_ring(cl_C_ring);
>>
>> struct parameter { cl_N z0; cl_UP_N p(); };
>>
>> int main(void) {
>> cl_UP_N q=CZ->create(1);
>> q.set_coeff(1, 1);
>> q.set_coeff(0, -1);
>> q.finalize();
>>
>> parameter param;
>> param.z0=1;
>> param.p()=q;
>>
>> }
>> --------------------
>>
>> produces the error message
>>
>> --------------------
>> /tmp/ccZPl6fM.o: In function `main':
>> test.cpp:(.text+0xc6): undefined reference to `parameter::p()'
>> collect2: error: ld returned 1 exit status
>> --------------------
>>
>> What am I doing wrong?
>>
>>
>> Note: replacing p() with p, which would make more sense to me, generates compiler errors.
>
> The linker is telling you that you are call an undefined member function
> p of struct parameter. You declared that member function in line 10 of
> your program, call it in line 20, but never defined it.
>
> My bet is that you wanted to declare p as a member variable, not as a
> member function, in line 10.
>
> hope this helps
> -richard.
>
Thanks for your quick response!
Your bet is correct - I do want to declare p as a member variable.
However, when I try to do this, the code
==================
#include <cstdlib>
#include <gmp.h>
#include <cln/cln.h>
using namespace std;
using namespace cln;
struct parameter { cl_N z0; cl_UP_N p; };
int main(void) {
parameter param;
}
==================
produces the error messages:
==================
In file included from /usr/include/cln/cln.h:126:0,
from test3.cpp:6:
/usr/include/cln/univpoly.h: In constructor ‘cln::cl_UP_N::cl_UP_N()’:
/usr/include/cln/univpoly.h:473:8: error: ‘cln::cl_UP::cl_UP()’ is private
inline cl_UP::cl_UP ()
^
In file included from /usr/include/cln/cln.h:127:0,
from test3.cpp:6:
/usr/include/cln/univpoly_complex.h:44:7: error: within this context
class cl_UP_N : public cl_UP {
^
test3.cpp: In constructor ‘parameter::parameter()’:
test3.cpp:11:8: note: synthesized method ‘cln::cl_UP_N::cl_UP_N()’ first
required here
struct parameter { cl_N z0; cl_UP_N p; };
^
test3.cpp: In function ‘int main()’:
test3.cpp:14:14: note: synthesized method ‘parameter::parameter()’ first
required here
parameter param;
======================
What is the compiler trying to tell me?
Thanks,
Michael
More information about the CLN-list
mailing list