problem with multiple inheritance

T

Tony Johansson

Hello experts!

I have a small program that is using multiple inheritance.
There are 4 classes involved
I get 4 compile error that I can't figure out why.
It's this row which is located in the main program see below that is causing
these compile errors.
cout << p->getName() << endl;
Here is the first compile error the other might be a consequesce of the
first one.
c:\Documents and Settings\Tony\kau\cplusplus\test4\start.cpp(13): error
C2446: '<' : no conversion from 'std::vector<_Ty>::size_type (__thiscall
std::vector<_Ty>::* )(void) const' to 'int'
with
[
_Ty=Person *
]

Here are all the class definitions
*********************
#include <string>
using namespace std;
class Person
{
public:
Person(string nn = "default") : name(nn) {}
string getName() const
{
return name;
}
private:
string name;
};

class Student : public virtual Person
{
public:
Student(string nn="default") : Person(nn) {}
};

class Employee : public virtual Person
{
public:
Employee(string nn="default") : Person(nn) {}
};

class TeachingAssistent : public Student, public Employee
{
public:
TeachingAssistent(string nn="default") : Person(nn) {}
};

Here is main program
****************
#include <vector>
#include "person.h"
#include <iostream>
using namespace std;

int main()
{
vector<Person *> p;
p.push_back(new Student);
p.push_back(new Employee);
p.push_back(new TeachingAssistent);

for(int i=0; i < p.size; i++)
cout << p->getName() << endl;

return 0;
}

Many thanks

//Tony
 
V

Victor Bazarov

Tony said:
[...]
for(int i=0; i < p.size; i++)

If you intend to find the size of the vector, you need to _call_ the
function 'size'. For that you need to supply the parentheses:

... i < p.size() ...
cout << p->getName() << endl;

return 0;
}


V
 
S

Serge Paccalin

Le mardi 16 août 2005 à 21:16:49, Tony Johansson a écrit dans
comp.lang.c++ :
Hello experts!

I have a small program that is using multiple inheritance.
There are 4 classes involved
I get 4 compile error that I can't figure out why.
It's this row which is located in the main program see below that is causing
these compile errors.
cout << p->getName() << endl;


Actually, no, it's *this* line:

for(int i=0; i < p.size; i++)
Here is the first compile error the other might be a consequesce of the
first one.
c:\Documents and Settings\Tony\kau\cplusplus\test4\start.cpp(13): error
C2446: '<' : no conversion from 'std::vector<_Ty>::size_type (__thiscall
std::vector<_Ty>::* )(void) const' to 'int'
with
[
_Ty=Person *
]

You have a problem with the comparison: (error C2446: '<') because
you're comparing an int (i) with a function pointer (p.size). 'size' is
not a piece of data, but a function; you want this:

for (int i=0; i < p.size(); i++)
for(int i=0; i < p.size; i++)
cout << p->getName() << endl;



--
___________ 16/08/2005 21:29:42
_/ _ \_`_`_`_) Serge PACCALIN -- sp ad mailclub.net
\ \_L_) Il faut donc que les hommes commencent
-'(__) par n'être pas fanatiques pour mériter
_/___(_) la tolérance. -- Voltaire, 1763
 
R

Ruwen Schnabel

Hi,

your problem is not related to multiple inheritance at all. The problem is
that you forgot the brackets behind the function call p.size() in the for
loop.

Greetings,
Ruwen
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,995
Messages
2,570,228
Members
46,818
Latest member
SapanaCarpetStudio

Latest Threads

Top