В основном я хочу постоянную - а не const
ссылку -
ссылка на переменную внутри класса.ссылка на переменную внутри класса
class Foo
{
public:
double x, y, z;
double& a = x;
double& b = y;
double& c = z;
}
Если я устанавливаю x = 3
Я хочу a
быть 3
слишком
, поэтому я хочу, чтобы быть ссылка на х было бы легко с указателем, как double* a = &x;
, но я не хочу разыменованием он каждый раз ..
Если я скомпилировать это я получаю это сообщение:
warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11 [enabled by default]
, но это еще не главная проблема: если я пытаюсь сейчас использовать их (a, b, c
), как здесь:
Foo foo;
foo.x = 1.0;
foo.y = 0.5;
foo.z = 5.1;
printf("a: <%f> b: <%f> c: <%f>\n", foo.a, foo.b, foo.c);
Я получаю это сообщение компилятора:
foo.h:5 error: non-static reference member 'double& Foo::a', can't use default assignment operator
foo.h:6 error: non-static reference member 'double& Foo::b', can't use default assignment operator
foo.h:7 error: non-static reference member 'double& Foo::c', can't use default assignment operator
foo.h: 5 double& a = x;
foo.h: 6 double& b = y;
foo.h: 7 double& c = z;
так что - моя ошибка?
hmm now i get 'error: non-static member member 'double & Foo :: a', не может использовать оператор присваивания по умолчанию – bricklore
@ Schnizel1337 Он отлично работает для меня ([ссылка на ideone] (http: // ideone.com/kkpdyF)). – dasblinkenlight
Да, я видел, но попытаюсь установить 'foo' в другой экземпляр' Foo', тогда вы получите ошибки: см. Http: // ideone.com/5qJisq – bricklore