Re: [cedet-semantic] Semantic does not correctly show PRIVATE/PROTECTED methods to a class of whom
Brought to you by:
zappo
From: Eric L. <er...@si...> - 2014-11-26 19:30:58
|
Hi, I found that the syntax for friend works if I used: friend class MySecondClass; I'm assuming that 'class' is optional based on your example below. If I left it out, it showed up as a variable of type int. I submitted a change to the parser to correctly parse the friend statement without CLASS, and added a test for both with and without class and made sure it found private data. Hopefully this solves your problem. Eric On 11/26/2014 12:33 PM, Dixon Ryan (ETAS/ESW6) wrote: > Hi Eric, > > Yes I made a mistake after muddling things up with some tests I have been running. > > This is solved. However, there is an issue friend classes I believe: > > I do not seem to be getting access to all of the private/protected methods or variables of the class that declares another as a friend. > > It is MySecondClass.cpp where the cursor should be put to see this problem. > > > Cheers. > ==== > > Here are the project files that prove this issue: > > ===main.cpp=== (Don't even need this) > #include "MyClass.hpp" > > int main ( void ) { > MyClass mc; > > mc. > > return 0; > } > ===END main.cpp=== > > ===MyClass.hpp=== > #include <string> > #include "MySecondClass.hpp" > > class MyClass : public MySecondClass{ > public: > friend MySecondClass; > > private: > int data; > public: > MyClass ( ) > : MySecondClass( ) > { } > > ~MyClass ( ) { } > > void myFunc( void ) const; > void myOtherFunc( void ) const; > int getData( void ) const; > protected: > void onlySubclass( void ) const; > void anotherFunction( std::string s ); > int data1; > public: > std::string secondMyFunc( std::string s ) const; > void oneMoreForGoodMeasure( void ) const; > int data2; > > private: > void somePrivateMethod( void ) const; > void someOtherPrivateMethod( void ); > }; > ===END MyClass.hpp=== > > ===MyClass.cpp=== > #include "MyClass.hpp" > > void MyClass::myFunc( void ) const { > ; > } > > void MyClass::myOtherFunc( void ) const { > ; > } > > int MyClass::getData( void ) const { > return 0; > } > > void MyClass::onlySubclass( void ) const { > ; > } > > void MyClass::anotherFunction( std::string s ) { > return ""; > } > > std::string MyClass::secondMyFunc( std::string s ) const { > return s; > } > > void MyClass::oneMoreForGoodMeasure( void ) const { > ; > } > > void MyClass::somePrivateMethod( void ) const { > > ; > } > > void MyClass::someOtherPrivateMethod( void ) { > ; > } > ===END MyClass.cpp=== > > ===MySecondClass.hpp=== > #include "MyClass.hpp" > > class MySecondClass { > public: > void methodOne( void ) const; > private: > void methodTwo ( void ) const; > int data1; > void methodThree( MyClass mc ); > }; > ===END MySecondClass.hpp=== > > ===MySecondClass.cpp=== > #include "MySecondClass.hpp" > > void MySecondClass::methodOne( void ) const > { > ; > } > > void MySecondClass::methodTwo( void ) const > { > ; > } > > void MySecondClass::methodThree( MyClass mc ) > { > mc. //I seem to get inconsistent access. I should get access to all methods and variables that belong to MyClass as I have declared that MySecondClass (this) is a friend of MyClass in MyClass! > } > ===END MySecondClass.hpp=== > > -----Original Message----- > From: Eric Ludlam [mailto:er...@si...] > Sent: 26 November 2014 16:58 > To: Dixon Ryan (ETAS/ESW6); ced...@li... > Cc: 324...@gm... > Subject: Re: [cedet-semantic] Semantic does not correctly show PRIVATE/PROTECTED methods to a class of whom those private/protected methods belong > > Hi, > > Only showing those 5 methods is the correct behavior because you can't call the protected or private methods from Main. > > If I go into MyClass.cpp, myfunc(void) and type in: > > this.<complete> > > then I get all the private and protected methods. > > Eric > > On 11/26/2014 06:44 AM, Dixon Ryan (ETAS/ESW6) wrote: >> I think the title explains the problem. >> >> Here are the source files which prove this bug (not showing >> PRIVATE/PROTECTED when semantic should): >> >> ===MyClass.hpp=== >> >> #include <string> >> >> class MyClass { >> >> private: >> >> int data; >> >> public: >> >> void myFunc( void ) const; >> >> void myOtherFunc( void ) const; >> >> int getData( void ) const; >> >> protected: >> >> void onlySubclassAndPar( void ) const; >> >> void anotherFunction( std::string s ); >> >> public: >> >> std::string secondMyFunc( std::string s ) const; >> >> void oneMoreForGoodMeasure( void ) const; >> >> private: >> >> void somePrivateMethod( void ) const; >> >> void someOtherPrivateMethod( void ); >> >> }; >> >> ==END MyClass.hpp=== >> >> ==MyClass.cpp=== >> >> #include "MyClass.hpp" >> >> void MyClass::myFunc( void ) const { >> >> ; >> >> } >> >> void MyClass::myOtherFunc( void ) const { >> >> ; >> >> } >> >> int MyClass::getData( void ) const { >> >> return 0; >> >> } >> >> void MyClass::onlySubclassAndPar( void ) const { >> >> ; >> >> } >> >> void MyClass::anotherFunction( std::string s ) { >> >> return ""; >> >> } >> >> std::string MyClass::secondMyFunc( std::string s ) const { >> >> return s; >> >> } >> >> void MyClass::oneMoreForGoodMeasure( void ) const { >> >> ; >> >> } >> >> void MyClass::somePrivateMethod( void ) const { >> >> ; >> >> } >> >> void MyClass::someOtherPrivateMethod( void ) { >> >> ; >> >> } >> >> ===END MyClass.cpp=== >> >> ===main.cpp=== >> >> #include "MyClass.hpp" >> >> int main ( void ) { >> >> MyClass mc; >> >> mc. //only 5 PUBLIC methods >> >> return 0; >> >> } >> >> ===END main.cpp=== >> >> >> >> ---------------------------------------------------------------------- >> -------- Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT >> Server from Actuate! Instantly Supercharge Your Business Reports and >> Dashboards with Interactivity, Sharing, Native Excel Exports, App >> Integration & more Get technology previously reserved for >> billion-dollar corporations, FREE >> http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg. >> clktrk >> >> >> >> _______________________________________________ >> cedet-semantic mailing list >> ced...@li... >> https://lists.sourceforge.net/lists/listinfo/cedet-semantic >> > |