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

Шаблоны функциональных классов, модульное программирование - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вижал студио не воспринимает чар http://www.cyberforum.ru/cpp-beginners/thread987976.html
Проблема с тем, что вижал студио не воспринимает мой ввод функций вычитания сложения и проч. Если сделать с помощью банального присваивания, все работает, что я делаю не так? #include "stdafx.h" #include "conio.h" #include <limits.h> #include <windows.h> //Функция проверки корректности переменных int proof (double x) { int y;
C++ Сформировать матрицу по правилу Здраствуйте, помогите пожалуйста написать это в С++ Буду очень благодарна!!! http://www.cyberforum.ru/cpp-beginners/thread987967.html
C++ Выяснить, имеются ли элементы второго массива в первом
На русском: Даны два одномерных массива размерами n и k соответственно. Выяснить, имеются ли элементы второго массива в первом. Если имеются - вывести индекс (по первому), иначе вывести -1. Если какой-либо элемент второго массива встречается в первом несколько раз, вывести индекс самого первого. Пример: ВВОД: 5 4 1 4 5 8 9 5 6 1 9 ВЫВОД: 3 -1
C++ Перевод числа из десятичной системы счисления в двоичную
Здравствуйте. Пытался написать пример перевода десятичного числа в двоичный с использованием рекурсии . Но при запуске выводит просто ноль . Что я делаю не так ? Подскажите , пожалуйста.Заранее огромное спасибо! #include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int fun(int x) { int c;
C++ Подсчет букв "е" во введенной строке http://www.cyberforum.ru/cpp-beginners/thread987955.html
Написать программу подсчета букв е, во введенной строке. Пожалуйста, код попроще, если можно, заранее спасибо.
C++ Что делать? Вот код #include <iostream> using namespace std; int main(){ unsigned long long int sc; cout << "Vvedite kol-vo secund" << endl << "_ "; cin >> sc; const unsigned long long int mns=60; const unsigned long long int hrs=3600; подробнее

Показать сообщение отдельно
serjflint
0 / 0 / 0
Регистрация: 23.09.2013
Сообщений: 6

Шаблоны функциональных классов, модульное программирование - C++

25.10.2013, 19:56. Просмотров 398. Ответов 2
Метки (Все метки)

Пишу лабораторную по C++. Суть состоит в том, что нужно описать шаблоны функциональных классов, методы которых должны быть описаны вне шаблонных классов, и всё это добро должно быть в отдельном от main'a cpp-шнике. Вроде всё написал честь по чести, но компилятор MVS 2012 Ult ругается:
Кликните здесь для просмотра всего текста
Ошибка 2 error LNK2019: ссылка на неразрешенный внешний символ "public: void __thiscall Print<int>::operator()(int const * const,int)const " (??R?$Print@H@@QBEXQBHH@Z) в функции _main C:\Users\Admin\documents\visual studio 2012\Projects\Win32Project1\Win32Project1\main.obj Win32Project1
Ошибка 3 error LNK2019: ссылка на неразрешенный внешний символ "public: int __thiscall Max<int,class Less<int> >::operator()(int const * const,int)const " (??R?$Max@HV?$Less@H@@@@QBEHQBHH@Z) в функции _main C:\Users\Admin\documents\visual studio 2012\Projects\Win32Project1\Win32Project1\main.obj Win32Project1
Ошибка 4 error LNK2019: ссылка на неразрешенный внешний символ _WinMain@16 в функции ___tmainCRTStartup C:\Users\Admin\documents\visual studio 2012\Projects\Win32Project1\Win32Project1\MSVCRTD.lib(crtexew.obj) Win32Project1

Вот main:
Кликните здесь для просмотра всего текста
#include <iostream>
#include <stdlib.h>
#include <ctime>
#include "Classes.h"
using namespace std;

int main()
{
int a[15], b = 15;
srand( time( NULL ) );
for(int i = 0; i < 15; i++)
a[i] = rand() % 100 + 1;
try
{
Print<int>()(a, b);
cout << Max<int>()(a, b) << endl;
}
catch(Exception ex)
{
cout << ex.Sender << " " << ex.Message << endl;
}
return 0;
}

Classes.cpp:
Кликните здесь для просмотра всего текста
#include "Classes.h"
#include <iostream>
using namespace std;

template<class T>
bool Less<T>::operator () (const T& Left, const T& Right) const
{
return Left < Right;
}

template<class T, class Comparer>
T Min<T, Comparer>::operator() (const T mas[], int cnt) const
{
if(cnt <= 0)
throw Exception("Min", "Empty");
T a = mas[0];
for(int i = 0; i < cnt; i++)
if(Comparer()(mas[i], a))
a = mas[i];
return a;
}

template<class T, class Comparer>
T Max<T, Comparer>::operator() (const T mas[], int cnt) const
{
if(cnt <= 0)
throw Exception("Max", "Empty");
T a = mas[0];
for(int i = 0; i < cnt; i++)
if(Comparer()(a, mas[i]))
a = mas[i];
return a;
}

template<class T>
T Sum<T>::operator() (const T mas[], int cnt) const
{
if(cnt <= 0)
throw Exception("Sum", "Empty");
T a(0);
for(int i = 0; i < cnt; i++)
a += mas[i];
return a;
}

template<class T>
void Print<T>::operator ()(const T mas[], int cnt) const
{
if(cnt <= 0)
throw Exception("Print", "Empty");
for(int i = 0; i < cnt; i++)
cout << mas[i] << " ";
cout << endl;
}

И Classes.h:
Кликните здесь для просмотра всего текста

#pragma once
#include <cstring>
using namespace std;

class Exception;

template <class T>
class Less
{
public:
bool operator () (const T& Left, const T& Right) const;
// {
// return Left < Right;
// }
};

template <class T, class Comparer = Less<T> >
class Min
{
public:
T operator () (const T mas[], int cnt) const;
// {
// if(cnt <= 0)
// throw Exception("Min", "Empty");
// T a = mas[0];
// for(int i = 0; i < cnt; i++)
// if(Comparer()(mas[i], a))
// a = mas[i];
// return a;
// }
};

template <class T, class Comparer = Less<T> >
class Max
{
public:
T operator () (const T mas[], int cnt) const;
// {
// if(cnt <= 0)
// throw Exception("Max", "Empty");
// T a = mas[0];
// for(int i = 0; i < cnt; i++)
// if(Comparer()(a, mas[i]))
// a = mas[i];
// return a;
// }
};

template <class T>
class Sum
{
public:
T operator () (const T mas[], int cnt) const;
// {
// if(cnt <= 0)
// throw Exception("Sum", "Empty");
// T a(0);
// for(int i = 0; i < cnt; i++)
// a += mas[i];
// return a;
// }
};

template <class T>
class Print
{
public:
void operator () (const T mas[], int cnt) const;
// {
// if(cnt <= 0)
// throw Exception("Print", "Empty");
// for(int i = 0; i < cnt; i++)
// std::cout << mas[i] << " ";
// std::cout << std::endl;
// }
};

class Exception
{
public:
char Sender[30];
char Message[100];
Exception(char* sndr, char* msg)
{
strcpy_s(Sender, sndr);
strcpy_s(Message, msg);
}
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru