Re:Re:FRIEND_CLASS_TYPEDEF

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

 



Hi Ho!

--- On Mon, 6/16/08, Kalugsky Uriy <urik@xxxxxxxxxxxxx> wrote:

> From: Kalugsky Uriy <urik@xxxxxxxxxxxxx>
> Subject: Re:Re:FRIEND_CLASS_TYPEDEF
> To: eus@xxxxxxxxxxxxxx
> Date: Monday, June 16, 2008, 9:19 PM
> Hello,
> 
> I tried 'typedef class A TYPEDEFED_A'. It
> doesn't work.
> Compilation was finished with messages:
> ./class_typedef.cpp:19: error: using typedef-name
> 'TYPEDEFED_A' after 'class'                

I don't know what the C++ standard says, but looking at the error message, I can only think that you cannot use an identifier that is defined with `typedef' after the `class' keyword of `friend'. Please correct me if I am wrong.

As a proof, when I changed `friend class TYPEDEFED_A' to `friend class A', the use of `TYPEDEFED_A a_buf;' in `main()' works perfectly fine.

BTW, IMHO, it would be better if you still type `class A' instead of making it opaque through the use of `typedef class A TYPEDEFED_A' so that other people can readily spot that `A' is actually a `class'.

> ./class_typedef.cpp:15: error: 'TYPEDEFED_A' has a
> previous declaration here                                  
>                                                             
>         
> ./class_typedef.cpp:19: error: friend declaration does not
> name a class or function                                   
>                                                             
> 
> ./class_typedef.cpp: In member function 'void
> A::PutInOut(const B&)':                            
>                                                             
>                      
> ./class_typedef.cpp:26: error: 'int B::a' is
> private                                                    
>                                                             
>               
> ./class_typedef.cpp:31: error: within this context         
>                                                             
>                                                            
>                                                            
>                                                             
>                                                            
> Compilation exited abnormally with code 1 at Mon Jun 16
> 18:15:01                                                   
>                                                             
>    
>  
> If the line 'friend class TYPEDEFED_A' changes to
> 'friend TYPEDEFED_A'
> Compilation will be finished with messages:
> 
> ./class_typedef.cpp:19: error: a class-key must be used
> when declaring a friend                                    
>                                                             
>    
> ./class_typedef.cpp:19: error: friend declaration does not
> name a class or function                                   
>                                                             
> 
> ./class_typedef.cpp: In member function 'void
> A::PutInOut(const B&)':                            
>                                                             
>                      
> ./class_typedef.cpp:26: error: 'int B::a' is
> private                                                    
>                                                             
>               
> ./class_typedef.cpp:31: error: within this context         
>                                                             
>                                                            
>                                                            
>                                                             
>                                                            
> Compilation exited abnormally with code 1 at Mon Jun 16
> 18:11:57                                                   
>                                                             
>    
>  
> Best regards,
> Yuri 
> 
> ==================================
> The operating system - Gnu/Linux
> ==================================
> 
> GCC Version
> =============================
> g++ (GCC) 4.1.0 (SUSE Linux)
> =============================
> 
> The code to compile
> ===================
> 
> #include <iostream>
> #include <iomanip>
> 
> using namespace std ;
> 
> class B ;
> class A
> {
> 	public :
> 	 A(void) {}
> 	  ~A(void) {}
> 	  
> 	  void PutInOut(B const &inst) ;
> } ;
> typedef class A TYPEDEFED_A ;
> 
> class B
> {
> ///////////////////////////////////////////////
> 	friend class TYPEDEFED_A ;
> //////////////////////////////////////////////
> 	
> 	public :
> 	B(void): a(777) {}
> 	~B(void){}
> 	
> 	private :
> 	  int a ;
> } ;
> 
> void TYPEDEFED_A::PutInOut(B const &inst)
> {
> 	cout <<"\nB.a " << inst.a
> << endl ;
> }
> 
> int main (int argc, char const *argv[])
> {
> 	B b_buf ;
> 	TYPEDEFED_A a_buf ;
> 	
> 	a_buf.PutInOut(b_buf) ;
> 			      
>   return 0 ;
> }
> 
> Command line
> =============
> g++ -Wall -O -o ./class_typedef ./class_typedef.cpp        
>                                                             
>                                                            
> 
> The compiler messages
> ========================
> ./class_typedef.cpp:19: error: using typedef-name
> 'TYPEDEFED_A' after 'class'
> ./class_typedef.cpp:15: error: 'TYPEDEFED_A' has a
> previous declaration here
> ./class_typedef.cpp:19: error: friend declaration does not
> name a class or function
> ./class_typedef.cpp: In member function 'void
> A::PutInOut(const B&)':
> ./class_typedef.cpp:26: error: 'int B::a' is
> private
> ./class_typedef.cpp:31: error: within this context

Best regards,
Eus


      

[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux