Re: Not able to access inherited protected member?
On Friday, 28 June 2013 07:28:22 UTC+3, Shriramana Sharma wrote:
On Friday, June 28, 2013 8:16:43 AM UTC+5:30, =D6=F6 Tiib wrote:
Can you clarify why you push those ill pieces of code?
I'm sorry but I don't understand what you mean by "pushing ill pieces
of code". What am I "pushing" here?
I am sorry, too, but Victor said that it is not allowed. Then you try to
trick it otherwise, then third way. That I called "pushing". You are
trying something in a strange way but what it is? What is your ultimate
goal? Can you clarify why?
I am not a professional programmer but am trying to use C++ for some
academic projects of mine. Is this the wrong forum to ask doubts about
"why doesn't this work" in order to learn how to write C++ code correctly=
?
It is correct forum but such path of learning C++ will not be easy. In fact
learning C++ by trial and error is as hard as learning to fly airplane
by trial and error.
Situation is different since you do not instantiate the template
(main is empty) and so the compiler is not required to diagnose it.
OK thanks -- this reply would have sufficed. I found that by
instantiating the template the error is indeed flagged.
Beware that C++ compiler may compile very lot of broken code without
any diagnostics. C++ standard tells things like "code is ill-formed,
no diagnostics required" or "behavior is undefined" about such code.
Compilers (most notably CLang) still aim to diagnose as many
errors as possible but it is hard.
Both examples are invalid C++. Try to write valid C++.
I *am* trying to write valid C++. For that I have to know what is valid
C++ (the standard is not all that simple to understand directly for
everyone -- I hope you will not deny that).
Yes, also learning to fly airplane by studying its construction details
is hard. There are only the formal technical details in standard. Audience
is meant to be the C++ tool and compiler writers.
Learn C++ by reading books that teach to use it. Most of us have several
such books. Fine list of books:
http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-l=
ist
The very fact that the compiler rejects it already tells me that what I=
wrote is invalid C++. I am trying to understand *why* it is invalid C++.=
It is rejecting because what you try is to break encapsulation. Constructor
is meant for initializing virtual bases, bases and members. The bases and=
members however have full right to their own privacy and so are meant to
initialize their details themselves:
template < typename T >
struct iterator_base
{
protected:
iterator_base( T* p )
: ptr(p)
{}
T* ptr;
};
template < typename T >
struct const_iterator
: public iterator_base<T>
{
const_iterator()
: iterator_base( 0 )
{}
const_iterator( const_iterator<T> const& it )
: iterator_base( it.ptr )
{}
};
The protected members are exceptional. Most books suggest to have the
data members private unless there are some rather good reasons.
If you have the time and patience, help me and I am thankful for your hel=
p.
My question was not meant to insult you or to refuse to help you. It was
to alert you to step back and analyze what you do. The way chosen seems
to be non-optimal.