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

Перегруженные знаки в дружественных функциях шаблона класса - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Калькулятор http://www.cyberforum.ru/cpp-beginners/thread927521.html
В идеале, то что представлено ниже является калькулятором с 4-мя действиями (+,-,*,/) и с произвольным количеством переменных. Но вот не работает он : С. Он основан на примере из Страуструпа. Я над ним мучался и походу понял, что он все же считает, однако у меня небольшие проблемы с выходом из цикла. В общем, сначала мы вводим одно число, потом (уже в цикле) вводим знак, а следом за ним другое...
C++ Из delphi в С++: создать приложение, визуально демонстрирующее работу разных алгоритмов сортировки Задача: Методические рекомендации по лабораторной работе №2 Процессы. Потоки. Часть 1. Задача: создать многопотоковое приложение, в котором можно менять приоритеты потоков. Программа DreadedSorts создает два потока. Один поток запускает пузырьковую сортировку (bubble sort), другой – быструю сортировку (quick sort). С помощью соответствующих ползунков на главной форме можно изменять... http://www.cyberforum.ru/cpp-beginners/thread927505.html
C++ Почему не добавляется элемент в вектор?
продолжение этой темы, но с другой проблемой. http://www.cyberforum.ru/cpp-beginners/thread927463.html Пишу программу, которая принимает произвольное количество файлов с записями на вход и в конечном счете выводит эти записи отсортированные в последний принятый файл. Это неокончательный вариант программы, тут я пытаюсь загнать все записи в один контейнер-вектор. tempset заполняется нормально,...
C++ умные указатели
у меня например есть куча юнитов, у каждого из них есть указатель на игровой ресурс (допустим камень). Есть такая задумка: когда камень иссякнет, юнит который истощил этот камень удаляет этот ресурс из памяти. Как сделать так чтобы при этом удалении все указатели указывающие на это камень обнулились?
C++ Как эффективно изучать программирование? http://www.cyberforum.ru/cpp-beginners/thread927491.html
Всем привет, хотелось бы услышать рекомендации по эффективному изучению языка C++. Изучаю его по книге Дейтелов, пишу и разбираю примеры из книги. Прошёл 7 глав, а дальше уже очень сложно понимать информацию. Осознаю, что теория это хорошо, но не хватает практических навыков. 1) Может нужно учить какие-то алгоритмы или разделы математики? Посоветуйте литературу. 2) Подскажите книгу, где есть...
C++ Виртуальные деструкторы Можно ли вызвать деструктор базового класса вместо использования виртуальных деструкторов? class CBase { public: CBase(const char *str1) { mStr1 = new char; strcpy(mStr1, str1); } подробнее

Показать сообщение отдельно
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
23.07.2013, 20:33     Перегруженные знаки в дружественных функциях шаблона класса
Здравствуйте! Не могу найти ошибку, только начал тренироваться с шаблонами. Помогите пожалуйста!
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include "stdafx.h"
#include <iostream>
using namespace std;
 
template<class Type>
class fraction
{
private:
    Type numerator;
    Type denominator;
    void reduction();
public:
    void show_frac()
    {
        cout << numerator << "/" << denominator << endl;
    }
    void get_frac()
    {
        cout << "Enter numerator: "; cin >> numerator;
        cout << "Enter denominator: "; cin >> denominator;
    }
    friend fraction<Type>& operator +(fraction<Type>& a, fraction<Type>& b);
    friend fraction<Type>& operator -(fraction<Type>& a, fraction<Type>& b);
    friend fraction<Type>& operator /(fraction<Type>& a, fraction<Type>& b);
    friend fraction<Type>& operator *(fraction<Type>& a, fraction<Type>& b);
};
 
template<class Type>
void fraction<Type>::reduction()
{
    Type bigger, smaller, temp;
    if(numerator >= denominator)
    {bigger = numerator; smaller = denominator;}
    else
    {bigger = denominator; smaller = numerator;}
    while(true)
    {
        temp = bigger % smaller;
        if(temp == 0)
        {temp = smaller; break;}
        else
        {bigger = smaller; smaller = temp;}
    }
    numerator /= temp;
    denominator /= temp;
}
 
template<class Type>
fraction<Type>& operator +(fraction<Type>& a, fraction<Type>& b)
{
    fraction<Type> frac;
    frac.numerator = a.numerator * b.denominator + b.numerator * a.denominator;
    frac.denominator = a.denominator * b.denominator;
    frac.reduction();
    return frac;
}
 
template<class Type>
fraction<Type>& operator -(fraction<Type>& a, fraction<Type>& b)
{
    fraction<Type> frac;
    frac.numerator = a.numerator * b.denominator - b.numerator * a.denominator;
    frac.denominator = a.denominator * b.denominator;
    frac.reduction();
    return frac;
}
 
template<class Type>
fraction<Type>& operator /(fraction<Type>& a, fraction<Type>& b)
{
    fraction<Type> frac;
    frac.numerator = a.numerator * b.denominator;
    frac.denominator = a.denominator * b.numerator;
    frac.reduction();
    return frac;
}
 
template<class Type>
fraction<Type>& operator *(fraction<Type>& a, fraction<Type>& b)
{
    fraction<Type> frac;
    frac.numerator = a.numerator * b.numerator;
    frac.denominator = a.denominator * b.denominator;
    return frac;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
    fraction<double> fr1, fr2, fr3;
    char ch = 'y', act;
    while(ch != 'n')
    {
        cout << "Enter first fraction: " << endl; 
        fr1.get_frac();
        cout << "Choose action(+, -, /, *): ";
        cin >> act;
        cout << "Enter second fraction: ";
        fr2.get_frac();
        switch(act)
        {
        case '+':
            fr3 = fr1 + fr2; break;
        case '-':
            fr3 = fr1 - fr2; break;
        case '/':
            fr3 = fr1 / fr2; break;
        case '*':
            fr3 = fr1 * fr2; break;
        default:
            cout << "Wrong action!!!" << endl; system("pause"); return 1;
        }
        cout << "Answer is "; fr3.show_frac();
        cout << "Would you like start again?(y/n): "; cin >> ch;
    }
    system("pause");
    return 0;
}
выдаёт: 1>------ Build started: Project: Lafore_H_14_ex_7_pg_679, Configuration: Debug Win32 ------
1>Lafore_H_14_ex_7_pg_679.obj : error LNK2019: unresolved external symbol "class fraction<double> & __cdecl operator*(class fraction<double> &,class fraction<double> &)" (??D@YAAAV?$fraction@N@@AAV0@0@Z) referenced in function _wmain
1>Lafore_H_14_ex_7_pg_679.obj : error LNK2019: unresolved external symbol "class fraction<double> & __cdecl operator/(class fraction<double> &,class fraction<double> &)" (??K@YAAAV?$fraction@N@@AAV0@0@Z) referenced in function _wmain
1>Lafore_H_14_ex_7_pg_679.obj : error LNK2019: unresolved external symbol "class fraction<double> & __cdecl operator-(class fraction<double> &,class fraction<double> &)" (??G@YAAAV?$fraction@N@@AAV0@0@Z) referenced in function _wmain
1>Lafore_H_14_ex_7_pg_679.obj : error LNK2019: unresolved external symbol "class fraction<double> & __cdecl operator+(class fraction<double> &,class fraction<double> &)" (??H@YAAAV?$fraction@N@@AAV0@0@Z) referenced in function _wmain
1>C:\Users\Aleksei\Documents\Visual Studio 2010\Projects\Lafore_H_14_ex_7_pg_679\Debug\Lafore_H_14_ex_7_pg_679.exe : fatal error LNK1120: 4 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Добавлено через 7 часов 18 минут
Отзовитесь о умные люди!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru