Форум программистов, компьютерный форум CyberForum.ru

Error: Перегрузка оператора вывода в поток, виртуальные методы - C++

Восстановить пароль Регистрация
 
Inocs
28 / 28 / 3
Регистрация: 28.10.2011
Сообщений: 183
17.05.2013, 19:21     Error: Перегрузка оператора вывода в поток, виртуальные методы #1
Ребят помогите плиз понять в чем дело. Почему возникает ошибка?

В соответствии с моими ожиданиями объекты потомки класса transport (т.е Car и Truck) должны были неявно преобразоваться к классу transport.

Error 2 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Car' (or there is no acceptable conversion) main.cpp 22 1 TestOverrideOutputStream

Error 1 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Transport' (or there is no acceptable conversion) main.cpp 21 1 TestOverrideOutputStream

Error 3 error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Truck' (or there is no acceptable conversion) main.cpp 23 1 TestOverrideOutputStream


Main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "Transport.h"
#include "Car.h"
#include "Truck.h"
 
#include <iostream>
 
using namespace std;
 
void main()
{
    Transport * pTrans = new Transport();
    Car       * pCar   = new Car();
    Truck     * pTruck = new Truck();
    
    cout << *pTrans;
    cout << *pCar;
    cout << *pTruck;
}
Transport.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
 
class Transport
{
protected:
    int CountOfwheels;
 
public:
    Transport();
    ~Transport();
    virtual void Print(std::ostream &os = std::cout)const;  
    
};
Transport.cpp


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include "Transport.h"
#include <iostream>
 
using namespace std;
 
Transport::Transport()
{
    CountOfwheels = 1;
}
 
 
Transport::~Transport()
{
}
 
 
void Transport::Print(ostream &os)const
{
    os << "Transport: " << CountOfwheels;
}
 
 
ostream & operator<<(ostream &os, Transport &t)
{
    t.Print(os);
    return os;
}


Car.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
#pragma once
#include "transport.h"
#include <iostream>
 
class Car :
    public Transport
{
public:
    Car();
    ~Car();
    virtual void Print(std::ostream &os)const;
};
Car.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Car.h"
#include <iostream>
 
using namespace std;
 
Car::Car()
{
    CountOfwheels = 4;
}
 
 
Car::~Car()
{
}
     
void Car::Print(std::ostream &os)const
{
        os << "Car: " << CountOfwheels; 
}
Truck.h

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma once
#include "transport.h"
#include <iostream>
 
class Truck :
    public Transport
{
public:
    Truck();
    ~Truck();
    
    virtual void Print(std::ostream &os)const;
};
Truck.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "Truck.h"
#include <iostream>
 
using namespace std;
 
Truck::Truck()
{
    CountOfwheels = 8;
}
 
 
Truck::~Truck()
{
}
 
void Truck::Print(std::ostream &os)const
{
    os << "Truck: " << CountOfwheels;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 19:21     Error: Перегрузка оператора вывода в поток, виртуальные методы
Посмотрите здесь:

Перегрузка оператора вывода в поток C++
C++ перегрузка оператора вывода
C++ Перегрузка оператора вывода
C++ Перегрузка оператора вывода
Перегрузка оператора вывода C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_Xan_
 Аватар для _Xan_
20 / 20 / 6
Регистрация: 19.09.2010
Сообщений: 85
17.05.2013, 19:31     Error: Перегрузка оператора вывода в поток, виртуальные методы #2
Ошибку он выдает потому, что вы пытаетесь вывести на экран указатель на класс.
Inocs
28 / 28 / 3
Регистрация: 28.10.2011
Сообщений: 183
18.05.2013, 12:51  [ТС]     Error: Перегрузка оператора вывода в поток, виртуальные методы #3
Цитата Сообщение от _Xan_ Посмотреть сообщение
Ошибку он выдает потому, что вы пытаетесь вывести на экран указатель на класс.
Честно говоря не совсем понятно. А где я вывожу указатель на объект и почему это приводит к такой ошибке?
stima
430 / 285 / 16
Регистрация: 22.03.2011
Сообщений: 929
Завершенные тесты: 1
18.05.2013, 14:28     Error: Перегрузка оператора вывода в поток, виртуальные методы #4
Это потому что компилятор не видит функцию, нет ее глобального обьявления. Она у вас скрыта в Transport.cpp.
Обьявите ее в Transport.h
Inocs
28 / 28 / 3
Регистрация: 28.10.2011
Сообщений: 183
19.05.2013, 13:40  [ТС]     Error: Перегрузка оператора вывода в поток, виртуальные методы #5
Спасибо!
Yandex
Объявления
19.05.2013, 13:40     Error: Перегрузка оператора вывода в поток, виртуальные методы
Ответ Создать тему
Опции темы

Текущее время: 12:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru