С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Шаблоны - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ перевод русских букв в транслит http://www.cyberforum.ru/cpp-beginners/thread98576.html
Задача: Перевести русские буквы в транслит, с ведением протокола.
C++ Вычислить высоту и биссектрису треугольника Треугольник задан координатами вершин А (0; 0), В (11; 10) и С (-11; 12). Вычислить высоту и биссектрису. Нужен код помогите пожалуста.. http://www.cyberforum.ru/cpp-beginners/thread98562.html
Функции языка С++ C++
Написать функции сложения матрицы с константой, умножения и деления матрицы на константу. Заранее спасибо:)
C++ Работа с файлами.
Всем Доброго дня, помогите пожалуйста,написать программу, которая в заданном текстовом файле заменяет все строчные латинские буквы прописными, а прописные – строчными, и часть кода который позваляет...
C++ Функции языка С++ http://www.cyberforum.ru/cpp-beginners/thread98541.html
Задана матрица x(n,m). Сформировать вектор y(n), содержащий сумму элементов строк. Найти максимальную сумму строки. Заранее спасибо.
C++ Игнорированием гласных букв и общет их количества Здравствуйте. Говорю сразу, я в программировании очень слаб, но жизнь заставила столкнуться с языком C. Задали мне в университете сделать задачу на языке С, "простую задачу". Прошу помощи на вашем... подробнее

Показать сообщение отдельно
CyBOSSeR
Эксперт С++
2305 / 1675 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
01.03.2010, 16:48
Цитата Сообщение от fasked Посмотреть сообщение
Еще один вопрос по шаблонам.
При перегрузка оператора <<
C++
1
friend std::ostream &operator << (std::ostream &out, BaseMatrix<T> &m);
Возникает ошибка ''undefined reference''

Исправляю прототип на следующий
C++
1
friend std::ostream &operator << (std::ostream &out, BaseMatrix<int> &m);
И ошибка соответственно пропадает, то есть как я понимаю необходимо для каждого типа описать собственную функцию? Шаблоны плохо работают с потоками?
fasked, Дело в том что оператор вывода должен объявляется другом следующим образом:
C++
1
2
template<class T>
friend std::ostream &operator << (std::ostream &out, BaseMatrix<T> &m);
Пример:
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
#include <iostream>
 
template<class T>
class Foo
{
  template<class T> friend std::ostream& operator<<(std::ostream& os, const Foo<T>& foo);
 
public:
  Foo(const T& field)
  : field(field)
  {}
 
private:
  T field;
};
 
template<class T>
std::ostream& operator<<(std::ostream& os, const Foo<T>& foo)
{
  return os << foo.field;
}
 
int main()
{
  Foo<int>    foo1(1);
  Foo<double> foo2(2.0);
 
  std::cout << foo1 << " " << foo2 << std::endl;
 
  return 0;
}
Добавлено через 1 час 22 минуты
Прошу прощения, но приведенный мною пример не совсем верен.
Дело в том, что в таком случае любая спецификация оператора вывода будет дружественной классу Foo.
Исправленная версия:
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
#include <iostream>
 
template<class T> class Foo;
 
template<class T> std::ostream& operator<<(std::ostream&, const Foo<T>&);
 
template<class T>
class Foo
{
  friend std::ostream& operator<<<T>(std::ostream& os, const Foo<T>& foo);
 
public:
  Foo(const T& field)
  : field(field)
  {}
 
private:
  T field;
};
 
template<class T>
std::ostream& operator<<(std::ostream& os, const Foo<T>& foo)
{
  return os << foo.field;
}
 
int main()
{
  Foo<int> foo1(1);
  Foo<double> foo2(2.0);
 
  std::cout << foo1 << " " << foo2 << std::endl;
 
  return 0;
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.