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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Inocs
28 / 28 / 3
Регистрация: 28.10.2011
Сообщений: 183
#1

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

17.05.2013, 19:21. Просмотров 517. Ответов 4
Метки нет (Все метки)

Ребят помогите плиз понять в чем дело. Почему возникает ошибка?

В соответствии с моими ожиданиями объекты потомки класса 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Error: Перегрузка оператора вывода в поток, виртуальные методы (C++):

Перегрузка оператора вывода в поток - C++
Собственно есть программка (большинство функций выкинул чтобы не запутывали) по работе с дробными числами # include &lt;iostream&gt; #...

Вызов прегруженного оператора вывода в поток из аналогичного оператора - C++
Программирую в c9.io с g++ получается тоже самое. Элементами стека(pointList) являются стеки(list) для которых уже определен оператор...

Перегрузка оператора вывода в С++ (для вывода данных вектора) - C++
Как правильно перегрузить оператор вывода для вектора чтобы он выводил все данные из вектора ? Для этого класса есил можно помогите. ...

Перегрузка оператора запись в поток - C++
Здравствуйте! Подскажите, пожалуйста, возможно ли так реализовать: #include &lt;fstream&gt; class ClassA { public: bool...

Перегрузка оператора запись в поток множества данных - C++
Здравствуйте! Я использую такой код: template&lt;typename T&gt; void operator &gt;&gt; (const T&amp; str) { m_fout &lt;&lt; str &lt;&lt; std::endl; } ...

Перегрузка оператора вывода - C++
Здравствуйте. Я пишу учебную программу реализующая арифметику обыкновенных дробей. И в данный момент перезагружаю оператор вывода. ...

4
_Xan_
20 / 20 / 6
Регистрация: 19.09.2010
Сообщений: 85
17.05.2013, 19:31 #2
Ошибку он выдает потому, что вы пытаетесь вывести на экран указатель на класс.
0
Inocs
28 / 28 / 3
Регистрация: 28.10.2011
Сообщений: 183
18.05.2013, 12:51  [ТС] #3
Цитата Сообщение от _Xan_ Посмотреть сообщение
Ошибку он выдает потому, что вы пытаетесь вывести на экран указатель на класс.
Честно говоря не совсем понятно. А где я вывожу указатель на объект и почему это приводит к такой ошибке?
0
stima
486 / 338 / 38
Регистрация: 22.03.2011
Сообщений: 1,081
Завершенные тесты: 2
18.05.2013, 14:28 #4
Это потому что компилятор не видит функцию, нет ее глобального обьявления. Она у вас скрыта в Transport.cpp.
Обьявите ее в Transport.h
1
Inocs
28 / 28 / 3
Регистрация: 28.10.2011
Сообщений: 183
19.05.2013, 13:40  [ТС] #5
Спасибо!
0
19.05.2013, 13:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.05.2013, 13:40
Привет! Вот еще темы с ответами:

Перегрузка оператора вывода - C++
Доброго времени суток. Столкнулся с проблемой: функция перегрузки вывода возвращает некорректное значение. Код вызова перегрузки ...

Перегрузка оператора вывода - C++
Здравствуйте. Не могу понять в чем ошибка. При выводе пишет: warning C4717: operator&lt;&lt;: рекурсия на всех путях выполнения, функция вызовет...

Перегрузка оператора вывода - C++
Здравствуйте! Подскажите пожалуйста как можно решить проблему с перегрузкой оператора. В моем коде выдает ошибку: error C2440: '=' :...

Перегрузка оператора вывода - C++
Всем привет, может быть глупый вопрос, но по Липманну вообще ничего не понятно, хотя книга для начинающих. Так как я мало знаком с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru