Re: conversion to non-scalar type error in inheritance hierarchy
Well, yes. Your code gives me the same error. I see the conversion
problem now. Thanks for clarifying. Of course I don't want explicit
conversion from the base class into the inherited classes. But how can
I achieve such kind of "parallel" inheritance? That is, 'C' is
accepted as 'B' in 'A1'. I know I could do it with reference returns
but that's not in accordance to the stl-iterator approach.
Cheers,
Kay
On Oct 29, 4:29 pm, Victor Bazarov <v.Abaza...@comAcast.net> wrote:
kmw wrote:
Hello,
I am working on container class with different implementations and
want to add stl-style iterators. Now, I am confronted with a
"conversion to non-scalar type" error which I do not understand. Any
comments are appreciated. Many thanks in advance!
The interface for the different implementations is defined in the base
class A. A1 is one implementation. B is the iterator base class and C
its implementation in A1. I really do not see a problem since C
inherits from B but the compiler says:
test.cpp: In function =91int main()':
test.cpp:34: error: conversion from =91A<int>::B' to non-scalar type
=91A1<int>::C' requested
You do not see the problem? How about here:
class B {};
class C : public B {};
B foo();
int main()
{
C c = foo();
}
Do you get the same error?
Best regards,
Kay
Code:
template <class X>
class A
{
public:
class B
{
public:
virtual ~B () {}
virtual void met=
hod () {}
};
virtual ~A () {}
virtual B begin ()=0;
};
template <class X>
class A1 : public A<X>
{
public:
class C : public A<X>::B
{
public:
~C () {}
void method ( ) =
{}
};
~A1 () {}
typename A<X>::B begin ( )
{
C test;
return test;
}
};
int main ( )
{
A1<int> test;
A1<int>::C test_it = test.begin ();
return 0;
}
There is no conversion from the base class to the derived class. You
have to define this conversion if you want it to exist.
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask