#include <iostream.h>
int n=0;
void invert(int & k = n)
{
k=-k;
}
void main()
{
int a=22, b=66;
invert (a+b);
cout<<a<<"\t"<<b<<"\n";
}
Инициализация ссылки
Приведённый ниже фрагмент программы из книжки, должен продемонстрировать использование праводопустимого выражения в качестве параметра:
Код:
Но компилятор (Visual C++ 6) выдаёт ошибку:
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
test.cpp
E:\C++\test\test.cpp(12) : error C2664: 'invert' : cannot convert parameter 1 from 'int' to 'int &'
A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.
test.exe - 1 error(s), 0 warning(s)
------------------------------------------------------------------------------------
В общем помогите разобраться в чём дело. Такая запись:
Код:
invert (a+b);
недопустима? Может как то иначе можно записать?
Цитата: strange kid
Приветствую всех!
Приведённый ниже фрагмент программы из книжки, должен продемонстрировать использование праводопустимого выражения в качестве параметра:
Но компилятор (Visual C++ 6) выдаёт ошибку:
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
test.cpp
E:\C++\test\test.cpp(12) : error C2664: 'invert' : cannot convert parameter 1 from 'int' to 'int &'
A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.
test.exe - 1 error(s), 0 warning(s)
------------------------------------------------------------------------------------
В общем помогите разобраться в чём дело. Такая запись:
недопустима? Может как то иначе можно записать?
Приведённый ниже фрагмент программы из книжки, должен продемонстрировать использование праводопустимого выражения в качестве параметра:
Код:
#include <iostream.h>
int n=0;
void invert(int & k = n)
{
k=-k;
}
void main()
{
int a=22, b=66;
invert (a+b);
cout<<a<<"\t"<<b<<"\n";
}
int n=0;
void invert(int & k = n)
{
k=-k;
}
void main()
{
int a=22, b=66;
invert (a+b);
cout<<a<<"\t"<<b<<"\n";
}
Но компилятор (Visual C++ 6) выдаёт ошибку:
--------------------Configuration: test - Win32 Debug--------------------
Compiling...
test.cpp
E:\C++\test\test.cpp(12) : error C2664: 'invert' : cannot convert parameter 1 from 'int' to 'int &'
A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.
test.exe - 1 error(s), 0 warning(s)
------------------------------------------------------------------------------------
В общем помогите разобраться в чём дело. Такая запись:
Код:
invert (a+b);
недопустима? Может как то иначе можно записать?
Принимай аргумент по значению, а не поссылке:
void invert(int k)
Код:
#include <iostream>
using namespace std;
int n=0;
void invert(int & k = n)
{
k=-k;
}
int main()
{
int a=22, b=66;
invert (a);
invert (b);
cout<<a<<"\t"<<b<<"\n";
}
using namespace std;
int n=0;
void invert(int & k = n)
{
k=-k;
}
int main()
{
int a=22, b=66;
invert (a);
invert (b);
cout<<a<<"\t"<<b<<"\n";
}
У вас ссылка непонятно на какую переменную (a+b).
Зачем тут нужна переменная n? Наверно лучше использовать константу...
А лучше вообще записать просто void invert(int &k).
Цитата: Kogrom
У вас ссылка непонятно на какую переменную (a+b).
В том то и дело - цитата из книжки:
"...В программе для параметра-ссылки проиллюстрированы:...использование в качестве фактического параметра арифметического выражения a+b..."
Я так понял что автор книги (Язык С++. Подбельский) не прав. Там ещё такой вариант есть.
Код:
double d=3.33;
invert(int(d));
invert(int(d));
Выдаётся та же ошибка.
Цитата: strange kid
Я так понял что автор книги (Язык С++. Подбельский) не прав.
Трудно сказать. Может это были примеры, как не надо делать? С другой стороны, примеры приводятся для какого-то раннего диалекта c++ (судя по включению библиотеки, типу функции main и т.д.). Лучше учиться по другой книжке.
IMHO Подбельский неправ согласно пункту 5.