C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

[Newbie] Namespace and inheritance...

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++)
View previous topic :: View next topic  
Author Message
Guest






PostPosted: Fri Jul 13, 2012 8:54 pm    Post subject: [Newbie] Namespace and inheritance... Reply with quote



Hello,

I am learning C++. I wrote the following C++ code to understand namespace and inheritance. It does not compile(g++ 4.6.3), but when I explicitly specify the scope resolution the program works. Why am I not able to directly call the public method implemented in the base class?


namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str() << std::endl;
}
};
};

namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};

int main()
{
N2::C c;
c.F(1);

// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");

c.F("one");

return 0;
}

Thanks and regards,

Plug
Back to top
Victor Bazarov
Guest





PostPosted: Fri Jul 13, 2012 8:54 pm    Post subject: Re: [Newbie] Namespace and inheritance... Reply with quote



On 7/13/2012 4:54 PM, plug.gulp (AT) gmail (DOT) com wrote:
Quote:
Hello,

I am learning C++. I wrote the following C++ code to understand
namespace and inheritance. It does not compile(g++ 4.6.3), but when I
explicitly specify the scope resolution the program works. Why am I not
able to directly call the public method implemented in the base class?


namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str() << std::endl;
}
};
};

namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};

int main()
{
N2::C c;
c.F(1);

// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");

c.F("one");

return 0;
}

This is covered by the FAQ. Please read FAQ before posting. You can
find the FAQ Lite here: http://www.parashift.com/c++-faq-lite/. Hint:
see section 23. And crank up the warning level on your compiler, maybe
you will get a useful diagnostic out of that tool for a change...

V
--
I do not respond to top-posted replies, please don't ask
Back to top
Bo Persson
Guest





PostPosted: Sat Jul 14, 2012 9:51 am    Post subject: Re: [Newbie] Namespace and inheritance... Reply with quote



plug.gulp (AT) gmail (DOT) com skrev 2012-07-13 22:54:
Quote:
Hello,

I am learning C++. I wrote the following C++ code to understand namespace and inheritance. It does not compile(g++ 4.6.3), but when I explicitly specify the scope resolution the program works. Why am I not able to directly call the public method implemented in the base class?


namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str() << std::endl;
}
};
};

namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};

int main()
{
N2::C c;
c.F(1);

// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");

c.F("one");

return 0;
}


It has nothing to do with namespaces.

Declaring something named F in the derived class hides the name F from
any base classes. This is similar to declaring local variables in an
inner scope which hides names from outer scopes.

If you want to use the name anyway, you can either use the full name
(like you did), or add a "using N1::C::F;" to class C2.


Bo Persson
Back to top
Bo Persson
Guest





PostPosted: Sat Jul 14, 2012 9:55 am    Post subject: Re: [Newbie] Namespace and inheritance... Reply with quote

Bo Persson skrev 2012-07-14 13:51:
Quote:
plug.gulp (AT) gmail (DOT) com skrev 2012-07-13 22:54:
Hello,

I am learning C++. I wrote the following C++ code to understand
namespace and inheritance. It does not compile(g++ 4.6.3), but when I
explicitly specify the scope resolution the program works. Why am I
not able to directly call the public method implemented in the base
class?


namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str()
std::endl;
}
};
};

namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};

int main()
{
N2::C c;
c.F(1);

// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");

c.F("one");

return 0;
}


It has nothing to do with namespaces.

Declaring something named F in the derived class hides the name F from
any base classes. This is similar to declaring local variables in an
inner scope which hides names from outer scopes.

If you want to use the name anyway, you can either use the full name
(like you did), or add a "using N1::C::F;" to class C2.

^^^^^^^^
Here "class C2" of course should be "class C in namespace N2".


Bo Persson
Back to top
Paul
Guest





PostPosted: Sat Jul 14, 2012 10:11 pm    Post subject: Re: [Newbie] Namespace and inheritance... Reply with quote

"Bo Persson" <bop (AT) gmb (DOT) dk> wrote in message
news:a6d4qaFkdrU1 (AT) mid (DOT) individual.net...
Quote:
plug.gulp (AT) gmail (DOT) com skrev 2012-07-13 22:54:
Hello,

I am learning C++. I wrote the following C++ code to understand namespace
and inheritance. It does not compile(g++ 4.6.3), but when I explicitly
specify the scope resolution the program works. Why am I not able to
directly call the public method implemented in the base class?


namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str()
std::endl;
}
};
};

namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};

int main()
{
N2::C c;
c.F(1);

// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");

c.F("one");

return 0;
}


It has nothing to do with namespaces.

Declaring something named F in the derived class hides the name F from any
base classes. This is similar to declaring local variables in an inner
scope which hides names from outer scopes.

If you want to use the name anyway, you can either use the full name (like
you did), or add a "using N1::C::F;" to class C2.

Will that then hide the F in N2::C ?




--- Posted via news://freenews.netfront.net/ - Complaints to news (AT) netfront (DOT) net ---
Back to top
Jamie
Guest





PostPosted: Sun Jul 15, 2012 5:25 am    Post subject: Re: [Newbie] Namespace and inheritance... Reply with quote

What is "namespace"? What is a name? Do you know what a "name" is? You use
it like a weapon. So let it be written.

<plug.gulp (AT) gmail (DOT) com> wrote in message
news:b03e953c-31f1-4fc2-bb77-0fe79213d04f (AT) googlegroups (DOT) com...
Hello,

I am learning C++. I wrote the following C++ code to understand namespace
and inheritance. It does not compile(g++ 4.6.3), but when I explicitly
specify the scope resolution the program works. Why am I not able to
directly call the public method implemented in the base class?


namespace N1 {
class C
{
public:
void F(const std::string& s)
{
std::cout << "N1::C::F(str): " << s.c_str() << std::endl;
}
};
};

namespace N2 {
class C : public N1::C
{
public:
void F(int i)
{
std::cout << "N2::C::F(int): " << i << std::endl;
}
};
};

int main()
{
N2::C c;
c.F(1);

// The following statement does not compile unless
// it is called with full scope resolution as follows:
// c.N1::C::F("one");

c.F("one");

return 0;
}

Thanks and regards,

Plug
Back to top
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ language (comp.lang.c++) All times are GMT
Page 1 of 1

 
 


Powered by phpBB © 2001, 2006 phpBB Group