This is the mail archive of the
gcc-help@gcc.gnu.org
mailing list for the GCC project.
Forward declaration issue on gcc 3.4.3(New)
- From: Jian-ping dot Hui at sybase dot com
- To: gcc at gcc dot gnu dot org
- Cc: gcc-help at gcc dot gnu dot org
- Date: Tue, 17 Jan 2006 18:01:36 +0800
- Subject: Forward declaration issue on gcc 3.4.3(New)
Sorry for the previous wrong format mail. Please ignore it.
I encountered an issue when building our program. The compilation will fail
when using gcc 3.4.3. However, the same program can be compiled
successfully with gcc 3.2.3.
I used the following example to reproduce the issue:
=====
a.h
=====
#ifndef A_H_
#define A_H_
class A
{
public:
A() { }
~A() { }
void FuncA();
};
#endif
======
a.cpp
======
#include "a.h"
======
b.h
======
#ifndef B_H_
#define B_H_
class A;
template class B
{
public:
B() { }
~B() { }
void FuncB()
{
A* pa;
pa->FuncA();
}
};
#endif
======
b.cpp
======
#include "b.h"
#include "a.h"
I used the following commands to compile b.cpp:
/usr/bin/g++ -c -g b.cpp
I got different result when using different version gcc.
===================================================
gcc version 3.2.3 20030502 (Red Hat Linux 3.2.3-42)
===================================================
Success.
===================================================
gcc version 3.4.3 20041212 (Red Hat 3.4.3-9.EL4)
===================================================
Fail with errors as below:
In file included from b.cpp:1:
b.h: In member function `void B::FunB()':
b.h:16: error: invalid use of undefined type `struct A'
b.h:4: error: forward declaration of `struct A'
If I change the order of head files in b.cpp to:
#include "a.h"
#include "b.h"
The compilation will pass.
Now my question is: Why there are such difference between the two version
gcc? Could I compile b.cpp by simply changing some compiler options?
Hopeful for your quick reply. I 'm very appeaciate for your help.
Thanks.
Best Regards
Jianping Hui
2006-01-16