Установите все Android SDK Build-tools и удалите import android.R из вашего класса Activity. После нажмите Project -> Очистить
import android.R;
Отвечая на ваш вопрос о стандарте, могу процитировать Стандарт C ++ §8.3.2 / 4 :
Ссылки на ссылки не должны быть, нет массивы ссылок и никаких указателей на ссылки.
Рассмотрим массив указателей. Указатель - это действительно адрес; поэтому, когда вы инициализируете массив, вы аналогичным образом говорите компьютеру: «выделить этот блок памяти для хранения этих X-чисел (которые являются адресами других элементов)». Затем, если вы измените один из указателей, вы просто измените то, на что он указывает; это все еще числовой адрес, который сам находится на том же месте.
Ссылка аналогична псевдониму. Если бы вы объявили массив ссылок, вы бы в основном сказали компьютеру: "
Ссылочный объект не имеет размера. Если вы напишете sizeof (referenceVariable)
, это даст вам размер объекта, на который ссылается referenceVariable
, а не размер самой ссылки. У него нет собственного размера, поэтому компилятор не может вычислить, какой размер потребуется массиву.
Потому что, как многие здесь сказали, ссылки не являются объектами. они просто псевдонимы. Правда, некоторые компиляторы могут реализовать их как указатели, но в стандарте это не предписывается. А поскольку ссылки не являются объектами, вы не можете на них указывать. Хранение элементов в массиве означает, что существует какой-то индексный адрес (т. Е. Указывающий на элементы по определенному индексу); и вот почему у вас не может быть массивов ссылок, потому что вы не можете указывать на них.
Используйте вместо этого boost :: reference_wrapper или boost :: tuple; или просто указатели.
Массив неявно конвертируется в указатель, а указатель на ссылку недопустим в C ++
Ссылки не являются объектами. У них нет собственного хранилища, они просто ссылаются на существующие объекты. По этой причине не имеет смысла иметь массивы ссылок.
Если вам нужен легкий объект , который ссылается на другой объект, то вы можете использовать указатель. Вы сможете использовать структуру struct
со ссылочным элементом в качестве объектов в массивах, только если вы предоставите явную инициализацию для всех ссылочных элементов для всех экземпляров struct
. Ссылки не могут быть инициализированы по умолчанию.
Edit: Как отмечает jia3ep, в стандартном разделе объявлений есть явный запрет на массивы ссылок.