Build Error: error: dereferencing pointer to incomplete type


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Build Error: error: dereferencing pointer to incomplete type
# 1  
Old 04-16-2009
Network Build Error: error: dereferencing pointer to incomplete type

I'm getting the following Error:

prepare_pcap.c: In function `prepare_pkts':
prepare_pcap.c:127: error: dereferencing pointer to incomplete type
prepare_pcap.c:138: error: dereferencing pointer to incomplete type

====================================

This is the part of the relevant Code:

-----PREPARE_PCAP.H-----------

#if defined(__HPUX) || defined(__DARWIN) || defined(__CYGWIN) || defined(__FreeBSD__)
struct iphdr
{
#ifdef _HPUX_LI
unsigned int ihl:4;
unsigned int version:4;
#else
unsigned int version:4;
unsigned int ihl:4;
#endif
u_int8_t tos;
u_int16_t tot_len;
u_int16_t id;
u_int16_t frag_off;
u_int8_t ttl;
u_int8_t protocol;
u_int16_t check;
u_int32_t saddr;
u_int32_t daddr;
/*The options start here. */
};

------PREPARE_PCAP.C---------

int prepare_pkts(char *file, pcap_pkts *pkts) {
pcap_t *pcap;
struct pcap_pkthdr *pkthdr = NULL;
.....
struct iphdr *iphdr;

.....
iphdr = (struct iphdr *)((char *)ethhdr + sizeof(*ethhdr)); <<<LINE 127
if (iphdr && iphdr->version == 6) {
//ipv6
pktlen = (u_long) pkthdr->len - sizeof(*ethhdr) - sizeof(*ip6hdr);


----------------------------
This is where the error occurs. Can anyone please give me suggestion?

Thank you in Advance.
# 2  
Old 04-16-2009
Code:
int prepare_pkts(char *file, pcap_pkts *pkts) {
pcap_t *pcap;
struct pcap_pkthdr *pkthdr = NULL;
.....
struct iphdr *iphdr;

.....
iphdr = (struct iphdr *)((char *)ethhdr + sizeof(*ethhdr)); <<<LINE 127
if (iphdr && iphdr->version == 6) {
//ipv6
pktlen = (u_long) pkthdr->len - sizeof(*ethhdr) - sizeof(*ip6hdr);

let's see here....

This: *ethdr is totally illegal. You cannot use a pointer syntax on a plain old struct.
I think you'd want this:

sizeof( struct ethdr )

in order to get any useful information.

substitute "struct whatever" wherever you have these sizeof(*thing) things.

----

BTW -- what in the world are you trying to do here?
Whatever it is .... it's the wrong way.

If you describe what it really is you're trying to accomplish,
I can show you a better way.

Best regards,
We're all learning,
quirk
# 3  
Old 04-16-2009
Build Error: error: dereferencing pointer to incomplete type

Thank you for your reply. First a background on what I'm trying to do - I'm trying to compile SIPp (VoIP load generator) on Solaris Platform. This is an open Source code - however, a majority of the usage is on Linux platform - where it compiles fine.

I tried your suggestion of replacing sizeof((ethhdr) with sizeof( struct ethhdr ) - however, it fails with the following error:

prepare_pcap.c:126: error: invalid application of `sizeof' to an incomplete type

Source Line 126:
iphdr = (struct iphdr *)((char *)ethhdr + sizeof(struct ethhdr));

Please let me know if you have other suggestions.

thank you,
--------------------------------------------------
# 4  
Old 04-16-2009
omg -- this is actual open source code? that's amazing.

Well -- one error at a time. Fix one -- on to the next.
That first suggestion did what it was supposed to do.

This statement:
Code:
iphdr = (struct iphdr *)((char *)ethhdr + sizeof(struct ethhdr));

Is complete insane. It's relying on typecasting a pointer of a structure,
jumping over the size of itself and assuming that the next spot in memory
is a pointer to iphdr. This simply is dreaming. Although it ~could~ happen,
given that the compiler writer places his variables on after the other in
memory but if it did... that means that the memory must've been explicitly
declared somewhere and if so... why not explicitly cast that memory here?

But whatever. The same problem exists, more or less. But to get it to compile,
try this:


Code:
iphdr = (struct iphdr *)((long)&ethhdr + (long)sizeof(struct ethhdr));

or:

Code:
iphdr = (void *)((long)&ethhdr + (long)sizeof(struct ethhdr));

good luck with this!
# 5  
Old 04-16-2009
Power

Modified your suggestion to:

iphdr = (void *)((long)&ethhdr + (long)sizeof(&ethhdr));

And I don't see the error :

prepare_pcap.c:127: error: invalid application of `sizeof' to an incomplete type


--------

Any suggestion on the original error : dereferencing pointer to incomplete type.

thx.
# 6  
Old 04-16-2009
why modify my suggestion and then complain when it doesn't work?

Here is how this stuff is supposed to work:

Code:
#include <stdio.h>
#include <string.h>

struct hdr {
  int x;
  long y;
  char z[16];
  };

struct hdr *iphdr;
struct hdr ethhdr;



int main()
{

ethhdr.x = 7;
ethhdr.y = 81;
strcpy( ethhdr.z, "frogs" );

iphdr = (void *)((long)&ethhdr + (long)sizeof(&ethhdr));

(void)printf( "address becomes: |%x|\n", &ethhdr );
(void)printf( "address becomes: |%x|\n", iphdr );

return 0;
}

OUTPUT:

Code:
address becomes: |20e54|
address becomes: |20e58|

But this line:

Code:
iphdr = (void *)((long)&ethhdr + (long)sizeof(&ethhdr));

can serve no useful purpose.
it is a bug. it's wrong. etc...
# 7  
Old 04-16-2009
I forgot one thing: I had tried w/ ur suggestion:
iphdr = (struct iphdr *)((long)&ethhdr + (long)sizeof(struct ethhdr));
and also with
iphdr = (void *)((long)&ethhdr + (long)sizeof(struct ethhdr));

However, I got this error again:

prepare_pcap.c:127: error: invalid application of `sizeof' to an incomplete type
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Warning: pointer type mismatch

Hi all, I'm new programming in C, so I had the next message in my code: Dual.c:88:20: warning: pointer type mismatch in conditional expression : &clientSa.sin6.sin6.sin6_addr, Any help would be great #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include... (1 Reply)
Discussion started by: godna
1 Replies

2. Programming

Compilation Error: dereferencing pointer to incomplete type

I am getting a dereferencing pointer to incomplete type error when i compile the following code on lines highlighted in red. Can anyone help me in identifying what is wrong in the code? #include<stdio.h> #include<stdlib.h> typedef struct{ int info; struct node* link ; } node; void... (3 Replies)
Discussion started by: sreeharshasn
3 Replies

3. UNIX for Advanced & Expert Users

find -exec with 2 commands doesn't work (error incomplete staement)

Hi Gurues, I need to modify an existing script that uses find to search a folder, and then move its contents to a folder. What I need to do is run gzip on each file after it's moved. So, I ran this little test: Put a ls.tar file on my $HOME, mkdir tmp, and then: virtuo@tnpmprd01: find .... (3 Replies)
Discussion started by: llagos
3 Replies

4. Programming

Dereferencing pointer to a shared memory struct

I have what should be a relatively simple program (fadec.c) that maps a struct from an included header file (fadec.h) to a shared memory region, but I’m struggling accessing members in the struct from the pointer returned by shmat. Ultimately, I want to access members in the shared memory structure... (2 Replies)
Discussion started by: arette
2 Replies

5. Programming

Dereferencing pointer to incomplete type

// Hello all, I am having this error "Dereferencing pointer to incomplete type " on these 2 lines: xpoint = my_point->x; ypoint = my_point->y; I am having no clue y this is happening. Any help would be greately appreciated!!!! #include<stdio.h> #include<string.h>... (2 Replies)
Discussion started by: mind@work
2 Replies

6. Programming

error: field `fatx_i' has incomplete type

I'm trying to compile a 2.4.26 kernel but I have to apply two patches to it. The patches are: linux-2.4.26-xbox.patch openMosix-2.4.26-1 This is the reason that it doesn't compile. There is only one error but I'm not familiar with C or C++(Unfortunately only Java and some lower-level... (2 Replies)
Discussion started by: lateralus01
2 Replies

7. Solaris

make[2]: warning: Clock skew detected. Your build may be incomplete.

dear all when i compile any file under solaris it gives the below warning how can i disable it -bash-3.00$ make GNLPFT177 make: Warning: File `GNLPFT177.rc' has modification time 36 s in the future make GNLPFT177.c make: Entering directory `/devapp/jordev/batch/source' make: Warning: File... (3 Replies)
Discussion started by: murad.jaber
3 Replies

8. Programming

error: field has incomplete type

Hello there, Here is how it goes - I have written a small test driver as an exercise to "Linux Device Drivers" and as a preparation for writing a real, functional driver. For the sake of seeing how far I got it working (I already implemented the open(0, read(), write() and ioctl() calls) I... (4 Replies)
Discussion started by: boyanov
4 Replies

9. Programming

array type has incomplete element type

Dear colleagues, One of my friend have a problem with c code. While compiling a c program it displays a message like "array type has incomplete element type". Any body can provide a solution for it. Jaganadh.G (1 Reply)
Discussion started by: jaganadh
1 Replies

10. Programming

Accesing structure member:Error:dereferencing pointer to incomplete type

$ gcc -Wall -Werror struct.c struct.c: In function `main': struct.c:18: error: dereferencing pointer to incomplete type $ cat struct.c #include <stdio.h> #include <stdlib.h> #include <string.h> /*Declaration of structure*/ struct human { char *first; char gender; int age; } man,... (3 Replies)
Discussion started by: amit4g
3 Replies
Login or Register to Ask a Question