[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [ns] new headers



don't know if it has anything to do with it, but the access method should use 
hdr_x instead of hdr_ebn, no?

btw I suppose you took ip.h and ip.cc as an example implementation; considering 
this the code looks ok to me.

-Tarik.
 
>Date: Tue, 17 Oct 2000 08:53:55 -0600
>From: Eric Weigle <[email protected]>
>X-Accept-Language: en, es-ES, ex-MX, fr-FR, fr-CA
>MIME-Version: 1.0
>To: Debojyoti Dutta <[email protected]>
>CC: [email protected]
>Subject: Re: [ns] new headers
>Content-Transfer-Encoding: 7bit
>
>Good morning-
>
>I think that the problem is that you are not getting the address of the right
>thing with the & operator. When the offset() function returns its value on the
>stack, you're trying to bind that temporary value which is invalid. Another way
>to look at it is that the c++ reference operator, while *implemented* as a
>pointer, is not *syntactically* a pointer; which is what the bind function
>wants.
>
>If you want to do something like this change your function to
>	inline static int *offset_ptr { return &offset_; }
>then
>	bind_offset(hdr_x::offset());
>
>Also, I don't know what you intend by making offset_ static; but that may not 
be
>what you want.
>
>Hope that helps!
>-Eric
>
>> I defined a header like this:
>> 
>> struct hdr_x{
>> 
>>         int x_;
>>         int& x(){ return x_; }
>> 
>>         static int offset_;     // offset for this header
>> 
>>         inline static int& offset() { return offset_; }
>>         inline static hdr_ebn* access(Packet* p) {
>>                 return (hdr_ebn*) p->access(offset_);
>>         }
>> 
>> };
>> 
>> And then defined the OTcl clas like:
>> 
>> static class XHeaderClass : public PacketHeaderClass {
>> public:
>>         XHeaderClass() : PacketHeaderClass("PacketHeader/X",
>>                                              sizeof(hdr_x)) {
>>                 bind_offset(&hdr_x::offset());
>>         }
>> } class_xhdr;
>> 
>> On compiling, it doesnt give errors. On linking it gives the following it
>> gives:
>> 
>> proto-x.o: In function `hdr_x::offset(void)':
>> proto-x.o(.hdr_x::gnu.linkonce.t.offset(void)+0x4): undefined reference
>> to `hdr_x::offset_'
>> collect2: ld returned 1 exit status
>> make: *** [ns] Error 1
>> 
>> Help will be appreciated
>> 
>> Debo
>
>--------------------------------------------
> Eric H. Weigle   CCS-1, RADIANT team
> [email protected]     Los Alamos National Lab
> (505) 665-4937   http://home.lanl.gov/ehw/
>--------------------------------------------

Tarik