Szablony funkcji C++ - potrzebna pomoc

0

Witam.
Uczę się obecnie szablonów funkcji w C++ i przepisałem z książki przykładowy kod programu:

//swap.cpp
#include <iostream>
#include <string>

using namespace std;

//Utwórz szablon funkcji.
//Funkcja wymienia wartości dwóch zmienych.
template <class T>
void swap(T &a, T &b) {
	T tmp = a;
	a = b;
	b = tmp;
}

int main() {

	int i1 = 100;
	int i2 = 200;

	cout << "Przed wymianą: i1 == " << i1 << " , i2 == " << i2 << endl;
	swap(i1, i2);
	cout << "Po wymianie: i1 == " << i1 << ", i2 == " << i2 << endl;

	//Wymień dwa ciągi.
	string s1 = "Larry";
	string s2 = "Andi";
	cout << "Przed wymianą: i1 == " << s1 << " , i2 == " << s2 << endl;
	swap(s1, s2);
	cout << "Po wymianie: i1 == " << s1 << " , i2 == " << s2 << endl;

	cout << "Naciśnij Enter lub Return, aby kontynuować.";
	cin.get();
	return 0;
}

Jednak kiedy chcę go skompilować to pokazują się błędy w linii 23 czyli w wywołaniu funkcji swap.
Proszę was o pomoc, gdyż kod przepisałem idealnie z książki i powinien działać a tego nie robi.
Dzięki i pozdro.

2

Gdyż próbujesz przedefiniować funkcję swap z przestrzeni std - kompilator nie wie do której ma się odwołać - wywal using namespace std, albo wpakuj swoją wersję funkcji w jakąś własną przestrzeń nazw i tak się do niej odwołuj.

1

Jak wyżej lub zmień nazwę swojej na np. Swap.

0

Ok dzięki śliczne Panowie.
A tutaj co jest zryte?

 
//stack.cpp
#include <iostream>
#include <string>
using namespace std;

//Utwórz szablon klasy.
template <class T>
class Stack {
public:
	//Konstruktor.
	Stack(unsigned int size = 100);

	//Destruktor;
	~Stack();

	//Metody.
	void push(T value);
	T pop();

private:
	unsigned int size;
	unsigned int sp;
	T *data;
};

//Implementacja konstruktora.
template <class T>
Stack<T>::Stack (unsigned int size /* = 100 */) {
	this->size = size;
	data = new T[size];
	sp = 0;
}
//Implementacja Destruktora.
template <class T>
Stack<T>::Stack() {
	delete[] data;
}
//Implementacje metod.
template <class T>
void Stack<T>::push(T value){
	data[sp++] = value;
}
template <class T>
T Stack<T>::pop(){
	return data[--sp];
}

int main(){
	//Utwórz nowy stos.
	Stack<int> intStack(100);

	//Wstaw na stos kilka elementów.
	intStack.push(1);
	intStack.push(2);
	intStack.push(3);

	//Zdejmij ze stosu kilka elemntów.
	cout << "wywołanie intStack.pop() zwróciło " << intStack.pop() << endl;
	cout << "wywołanie intStack.pop() zwróciło " << intStack.pop() << endl;
	cout << "wywołanie intStack.pop() zwróciło " << intStack.pop() << endl;

	cout << "Naciśnij Enter lub Return, aby kontynuować." << endl;
	cin.get();
	return 0;

}

Bo chyba nie to samo, albo nie tylko to.

PS: Zapomniałem ~ przed destruktorem w jego implementacji.

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