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

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

Войти
Регистрация
Восстановить пароль
 
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
#1

ООП. Шаблоны - C++

10.10.2013, 20:46. Просмотров 619. Ответов 6
Метки нет (Все метки)

Начинаю учить ООП и Шаблоны. Вот нашел пример в учебнике, все сделал так как там написано.
Но почему-то при компиляции выдает ошибки.
tovar.h
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#ifndef _tovar_h_
#define _tovar_h_
 
#include <iostream>
#include <string.h>
using namespace std;
 
template <class Currency> class Tovar
{
private:
    static Currency sum;
    Currency price;
    string units;
 
public:
    static Currency GetSum (void);
    bool Sell (void);
    Tovar();
    Tovar(Currency);
    Tovar(Currency, const string&);
    friend ostream& operator << <Currency> (ostream&, Tovar<Currency>&);
};
 
template <class Currency> Currency Tovar<Currency>::sum = 0;
 
template <class Currency> Currency Tovar<Currency>::GetSum (void)
{
    return sum;
}
 
template <class Currency> bool Tovar<Currency>::Sell(void)
{
    if (price > 0)
    {
        sum += price;
        price = 0;
        return true;
    }
    else return false;
}
 
template <class Currency> Tovar<Currency>::Tovar(Currency p)
{
    price = 1;
    units = "piece";
}
 
template <class Currency> Tovar<Currency>::Tovar(Currency p, const string& ov)
{
    price = (p>0)?p:0;
    units = ov;
}
 
template <class Currency> ostream& operator << (ostream& os, Tovar<Currency>& t)
{
    if(t.price>0) return os<<"$"<<((Currency)t.price)<<" per 1 "<<t.units;
    else return os <<"Sold 1 "<<t.units<<" Cash=="<<Tovar<Currency>::sum;
}
#endif
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <string.h>
#include "tovar.h"
using namespace std;
 
void main (void)
{
    Tovar <int> tovar1_int;
    Tovar <int> tovar_int(10);
    Tovar <float> tovar_float((float)29.95, "kg");
    cout <<"INT typed Tovar:"<<endl<<tovar1_int<<endl<<tovar_int<<endl;
    cout <<"FLOAT typed Tovar:"<<endl<<tovar_float<<endl;
    cout <<"NOW SALE!!!"<< endl;
    if(tovar1_int.Sell()) cout << "Sell ok! ";
    cout << "tovar1_int: " << tovar1_int << endl;
    if(tovar_int.Sell()) cout << "Sell ok! ";
    cout << "tovar_int: " << tovar_int << endl;
    if(tovar_float.Sell()) cout << "Sell ok! ";
    cout << "tovar_float: " << tovar_float << endl;
    cout << "Cash<INT>: " << Tovar<int>::GetSum() << endl;
    cout << "Cash<FLOAT>: " << Tovar<float>::GetSum() << endl;
}


Ошибки:
Ошибка 1 error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое преобразование отсутствует) e:\programming\c++\consoleapplication1\tovar.h 56
Ошибка 2 error C2679: бинарный "<<": не найден оператор, принимающий правый операнд типа "std::string" (или приемлемое преобразование отсутствует) e:\programming\c++\consoleapplication1\tovar.h 57
Ошибка 3 error C2088: <<: недопустимо для class e:\programming\c++\consoleapplication1\tovar.h 56
Ошибка 4 error C2088: <<: недопустимо для class e:\programming\c++\consoleapplication1\tovar.h 57

В чем проблема?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.10.2013, 20:46     ООП. Шаблоны
Посмотрите здесь:

Подкиньте практику по ООП + полиморфизм + шаблоны пожалуйста. - C++
Здравствуйте форумчане. Хотел бы попросить подбросить практику по таким темам: ООП - полифорфизм + Тэмплэты. Ну и если можно, что нибудь...

Шаблоны С++ - C++
template &lt;typename T_sizeCapacity&gt; class SomeClass { public: T_sizeCacity size; }; Как сделать чтобы T_sizeCapacity мог быть...

шаблоны - C++
Здравствуйте, а можете подсказать в чем различия между шаблоном функции и шаблонной функцией?

Шаблоны - C++
При компиляции функция шаблона не выполняется template&lt;class T&gt; void sort_a(T a){ int min,n,m,k,i,j,t; min=0; ...

Шаблоны - C++
Создать параметризированные классы List и ListItem. Классы должны содержать конструкторы, деструкторы, функции add, in, remove, getLength,...

Шаблоны - C++
template &lt;typename Type&gt; bool Func(Type &amp;data) { } Как сделать, что бы шаблон работал только для некоторых типов? Скажем...

Шаблоны - C++
Так делать типо нельзя ? template&lt;class T, int maxPrint = 10&gt; void PrintAll(std::vector&lt;T&gt;&amp; forPrint) { ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
10.10.2013, 21:53     ООП. Шаблоны #2
C++
1
2
//#include <string.h>
#include <string>

Не по теме:

Про реализацию Tovar(); не забудьте.

Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
10.10.2013, 22:12     ООП. Шаблоны #3
Да и реализация класса должна быть в отдельном cpp файле. Потому что в файлах заголовка лежит только объявление.

Добавлено через 7 минут
P.S. Сегодня здесь поднимали тему, о том, что лучше писать int main(), вместо void main(). Почитайте, будет полезно.
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
10.10.2013, 22:33  [ТС]     ООП. Шаблоны #4
исправил.. теперь это:
Ошибка 1 error LNK2019: ссылка на неразрешенный внешний символ "public: __thiscall Tovar<int>::Tovar<int>(void)" (??0?$Tovar@H@@QAE@XZ) в функции _main E:\Programming\c++\ConsoleApplication1\maintovar.obj
Ошибка 2 error LNK1120: неразрешенных внешних элементов: 1 E:\Programming\c++\ConsoleApplication1\Debug\ConsoleApplication1.exe
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.10.2013, 23:27     ООП. Шаблоны #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nikcharn Посмотреть сообщение
Да и реализация класса должна быть в отдельном cpp файле. Потому что в файлах заголовка лежит только объявление.
эй эй, полегче, с шаблонами так нельзя
Nikcharn
71 / 53 / 3
Регистрация: 31.07.2009
Сообщений: 149
10.10.2013, 23:34     ООП. Шаблоны #6
Цитата Сообщение от Jupiter Посмотреть сообщение
эй эй, полегче, с шаблонами так нельзя
Эх, пора идти спать.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2013, 02:35     ООП. Шаблоны
Еще ссылки по теме:

Шаблоны - C++
ругается на строку &quot;friend class List&lt;T&gt;;&quot;, вот что пишет: 1&gt;c:\users\slava\documents\visual studio...

Шаблоны - C++
Не могу понять в чем косяк. Компилятор ругается на перегрузке оператора ввода // Lab1-var3.cpp : Defines the entry point for the...

Шаблоны - C++
Вспомнилось что во время чтения инфы про шаблоны, находил предложения от Страуструпа &quot;посмотреть код который генерируется из шаблона при...

шаблоны в си++ - C++
Здравствуйте, я уже сутки пытаюсь переписать стек так, что-бы можно было испольовать все возможные типы данных для элементов стека. Если я...

Шаблоны C++ - C++
Написал template на С++, но он нифига не компилица, пишет мол типа не могу string в int преобразовать в строчке int out_param = (int)param;...


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

Или воспользуйтесь поиском по форуму:
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,075
11.10.2013, 02:35     ООП. Шаблоны #7

Не по теме:

Цитата Сообщение от Jupiter Посмотреть сообщение
эй эй, полегче, с шаблонами так нельзя
а порой хотелось бы :3



Цитата Сообщение от gorus95 Посмотреть сообщение
using namespace std;
за такое в хедерах по рукам бьют. Подключаешь вот неведомый модуль к проекту и внезапно все функции в одну корзину std валятся.
Yandex
Объявления
11.10.2013, 02:35     ООП. Шаблоны
Ответ Создать тему
Опции темы

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