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

Странное проявление перегрузки оператора и шаблонов классов - C++

Восстановить пароль Регистрация
Другие темы раздела
C (СИ) Считывание из файла и сортировка http://www.cyberforum.ru/cpp-beginners/thread404965.html
Добрый вечер. У меня такой вопрос. Мне необходимо считать из файла данные (100к строк в формате string(валюта), string(дата), float(курс)), отсортировать (1. выбрать все одинаковые значение в первом string-поле (валюта), 2. выбрать из них максимальный и минимальный курс (третье float-поле)) и записать эти максимальные и минимальные значения в новый файл. Какой для этого выбрать алгоритм? ...
C++ Алгоритм симметричного шифрования TwoFish При реализации алгоритма возникли сложности. Сначала работа шла живо и весело, запрограммировал расширение ключа, шифрование... Но когда дело дошло до дешифровки получилась какая-то ерунда. Сообщение не расшифровывается. Как ни бился не могу понять в чем проблема. Помогите, люди добрые! Вдруг свежий глаз заметит какую-нибудь оплошность или ошибку в алгоритме... Буду рад любой помощи! ... http://www.cyberforum.ru/cpp-beginners/thread404958.html
Дана строка, содержащая текст на русском языке C++
1. Дана строка. Подсчитать количество букв в последнем ее слове. 2. Дана строка, содержащая текст на русском языке. Определить, сколько раз встречается в ней самое длинное слово. Заранее всем благодарен!!!
C++ Сколько раз символ повторяется в строке
здравствуйте. В общем задача такая, написать программу которая бы считала, сколько раз символ повторяется в строке. строку надо вводить с клавиатуры. Единственный оператор, который я знал для ввода строки с клавиатуры это gets(), но на линуксе он у меня почему-то не работает. хотя в винде, при добавлении библиотеки sdtafx.h всё работает. Не могли бы подсказать, как написать такую программу...
C++ Работа со структурами и файлами. Методы сортировки и поиска данных. http://www.cyberforum.ru/cpp-beginners/thread404950.html
Данные хранятся в файле на диске.Есть матрица m*n, где m и n – целые числа. Упорядочить ее за ростом методом минимумов. Методами последовательного и бинарного поиска найти заданное число. Данные вводятся из файла. Помогите пожалуйста.За ранее очень благодарен
C++ обьясните ошибку #include <stdio.h> #include <string.h> #include<iostream>; using namespace std; int main(void) { setlocale(LC_ALL,"Russian"); int i,n,k=0; char s; cout<<"Введите колличество строк которые будите вводить"<<endl; подробнее

Показать сообщение отдельно
Alx
1 / 1 / 0
Регистрация: 06.07.2011
Сообщений: 24
12.12.2011, 02:24     Странное проявление перегрузки оператора и шаблонов классов
Очень странная проблема. Использование операторов + * / отличается от - в контексте внешнего класса

Точка возникновения проблемы:
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
//
// Описание:        Выполнить математическую операцию
// REM:         с — Оп, n и m берутся из последних двух переменных
//
template <class T>
void  
    StraightPolishTranslator <T> :: call ( char c )
{
    makeNewConstant ( ); // Сгенерировать константу из последних символов
 
    switch ( c )
    {
    case( '+' ):
        varStc.push ( varStc.pop( ) + varStc.pop( ) );
    break;
    case( '-' ):
        varStc.push ( varStc.pop( ) - varStc.pop( ) );  "<== Здесь возникает ошибка компиляции"
    break;
    case( '*' ):
        varStc.push ( varStc.pop( ) * varStc.pop( ) );
    case( '/' ):
        varStc.push ( varStc.pop( ) / varStc.pop( ) );
    }
}
Ошибка:
Код
error C2664: AlxArcheve::QStack<T>::push: невозможно преобразовать параметр 1 из "int" в "CN"
т.е. операция вдруг возвращает int а не родной класс CN, который и ожидается функцией экземпляра класса QStack<CN> varStc.

Часть описания класса StraightPolishTranslator (функция которого использует проблемный оператор)
C++
1
2
3
4
5
6
7
8
9
10
11
// Шаговый конвертор польской записи
template < class T = CN >
class StraightPolishTranslator
{
    void          makeNewConstant ( );  // Записать const в цельном виде и очистить буфер
    void          call ( char );    // Выполнить математическую операцию 
// ............................................
public:
              StraightPolishTranslator ( );
// ............................................
};
Часть описания класса CN
C++
1
2
3
4
5
6
7
8
9
10
11
// Тип целых чисел в специальных правилах арифметики и произвольной системе счисления
class CN
{
// ............................................
const CN &    operator + ( CN & );
const CN &    operator - ( CN & );
// ............................................
const CN &    operator += ( CN & );
const CN &    operator -= ( CN & );
// ............................................
};
И в заключение класс QStack
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
namespace AlxArcheve {
template < class T >
class QStack
{
private: 
    struct Node
    {
        T v;
        Node * n;
        Node ( T _v, Node * _n ): v (_v), n (_n) {}
    };
    Node * topN;
    unsigned int len;
 
public:
    QStack();//*
    // QStack(int size);//*
    QStack(const QStack*);
    QStack* operator=(QStack*);
    ~QStack();//*
 
    T pop ();// вернуть и удалить
    void push(T);//*
    bool empty();// isEmpty
    unsigned int size ();
 
    T top() const;
};
}
При этом как сложение, так и вычитание одинаково великолепно отрабатывают вне шаблонного класса StraightPolishTranslator.

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