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

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

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

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

17.05.2013, 19:21. Просмотров 482. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 19:21     Error: Перегрузка оператора вывода в поток, виртуальные методы
Посмотрите здесь:

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

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

Перегрузка оператора запись в поток - 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++
struct SomeStruct { std::ostream&amp; operator&lt;&lt; (std::ostream&amp; s/*, SomeStruct&amp;*/) { return s &lt;&lt; &quot;123&quot;; }; }; int main() {...

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

Перегрузка оператора вывода - C++
Ребят, привет! Проблемная часть - operator &lt;&lt; если комментировать его вызов в main - сборка осуществляется, иначе - нет. ...

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

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

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

Перегрузка оператора вывода - C++
Доброго времени суток. Задача программы: умножение и деление комплексных чисел. Файл number.h #pragma once class number { ...

Перегрузка оператора вывода - C++
Я сотворил одну программку, при выводе первый элемент массива не правильный. Уже перегрузил оператор вывода, но не понимаю что не так....


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
_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
449 / 298 / 20
Регистрация: 22.03.2011
Сообщений: 966
Завершенные тесты: 2
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: Перегрузка оператора вывода в поток, виртуальные методы
Ответ Создать тему
Опции темы

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