why passing argument by reference(&ref) in a template function shows error ? but works fine if arguments passed by pointer(*ptr) ?
-
in the below program it i have used both ways i.e. passed arguments by reference and pointers. 1. Arguments by reference:
#include
using namespace std;template
void swap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main(){
fun(100, 200, 11.22, 33.44);return 0;
}
2. Arguments by pointers:
#include
using namespace std;template
void swap(T *x, T *y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main(){
fun(100, 200, 11.22, 33.44);return 0;
}
also if i pass the arguments by reference but make it a constant then also i works, why ?
#include
using namespace std;template
void swap(const T &x, const T &y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main(){
fun(100, 200, 11.22, 33.44);return 0;
}
Thank you.
-
in the below program it i have used both ways i.e. passed arguments by reference and pointers. 1. Arguments by reference:
#include
using namespace std;template
void swap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main(){
fun(100, 200, 11.22, 33.44);return 0;
}
2. Arguments by pointers:
#include
using namespace std;template
void swap(T *x, T *y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main(){
fun(100, 200, 11.22, 33.44);return 0;
}
also if i pass the arguments by reference but make it a constant then also i works, why ?
#include
using namespace std;template
void swap(const T &x, const T &y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main(){
fun(100, 200, 11.22, 33.44);return 0;
}
Thank you.
You have a name clash with
std::swap
. Try#include using std::cout;
using std::endl;template
void swap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main()
{
fun(100, 200, 11.22, 33.44);
} -
You have a name clash with
std::swap
. Try#include using std::cout;
using std::endl;template
void swap(T &x, T &y){
T temp = x;
x = y;
y = temp;
}void fun(int m, int n, float a, float b){
cout << "m & n before swap: " << m << " " << n << endl; swap(m, n); cout << "m & n after swap: " << m << " " << n << endl; cout << "i & j before swap: " << a << " " << b << endl; swap(a, b); cout << "i & j after swap: " << a << " " << b << endl;
}
int main()
{
fun(100, 200, 11.22, 33.44);
}