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

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

Восстановить пароль Регистрация
 
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 145
10.10.2013, 20:46     ООП. Шаблоны #1
Начинаю учить ООП и Шаблоны. Вот нашел пример в учебнике, все сделал так как там написано.
Но почему-то при компиляции выдает ошибки.
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++ Шаблоны
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». C++
C++ шаблоны в си++
C++ Шаблоны и т.д.(
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
10.10.2013, 21:53     ООП. Шаблоны #2
C++
1
2
//#include <string.h>
#include <string>

Не по теме:

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

Nikcharn
 Аватар для 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
Сообщений: 145
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
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
10.10.2013, 23:27     ООП. Шаблоны #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Nikcharn Посмотреть сообщение
Да и реализация класса должна быть в отдельном cpp файле. Потому что в файлах заголовка лежит только объявление.
эй эй, полегче, с шаблонами так нельзя
Nikcharn
 Аватар для 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++
Подкиньте практику по ООП + полиморфизм + шаблоны пожалуйста. C++
Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны C++

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,405
11.10.2013, 02:35     ООП. Шаблоны #7

Не по теме:

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



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

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