template - jak to właściwie działa?

0
#include "stdafx.h"
#include <iostream>

using namespace std;

template <typename T>
T max(T x, T y);

int _tmain(int argc, _TCHAR* argv[])
{
	int a=1, b=2;
	cout << max(a,b); // T -> int

	double a=1.1, b=1.2;
	cout << max(a,b); // T -> double

	system("pause");
	return 0;
}

template <typename T>
T max(T x, T y)
{ return x > y ? x : y; }

czego brakuje w tym kodzie? nie chce działać :/

0

stdafx wywaliłem i maina zmieniłem na normalnego, a nie tego wymagane przez twój kompilator
Zacznijmy od tego, że 2 razy deklarujesz a i b. Twój kompilator takie coś przepuszcza??

template <class T>
T max(T &x, T &y)
{ return x > y ? x : y; }

zmieniłem typename (który służy do "definiowania" nowych typów) na class
I zmieniłem na referencje żeby nie kopiował.

0

@up typename też może być.

jak wywołujesz taką funkcję szablonową to wypadałoby podać jej typ zwracany w tym wypadku czyli max<int>(a, b); I zrezygnowałbym z nazwy max w tej przestrzeni bo znajduje się ona w jednym z nagłówków i możliwe, że środowisko automatycznie dołącza ci go przez co masz konflikt nazw.

0
  1. deklarujesz po 2 zmienne o tej samej nazwie w tym samym scope
  2. w przestrzeni nazw std już istnieje funkcja o nazwie max, która może przyjmować 2 argumenty np. int - musisz albo wywalić to using namespace, albo zmienić nazwę funkcji

1 użytkowników online, w tym zalogowanych: 0, gości: 1