2015-03-28 2 views
0

У меня есть некоторые ошибки. Мне нужно передать член в const член с operator =. я не знаю, что это ошибка, моя функция декларации:& member to const member

template<class I> forceinline 
void OverweightValues<I>::init(int t, 
         SharedArray<int>& elements0, 
         SharedArray<int>& weights0, 
         I& i) { 
{..} 
//both are declared as 'const SharedArray<int> elements, weights;' 
//but elements0 and weights0 not is const 
elements = elements0; 
weights = weights0; 

Когда я компилирую получаю ошибку:

In line(16): no operator "=" matches these operands operand types are: const SharedArray<int> = SharedArray<int> 
In line(17): no operator "=" matches these operands operand types are: const SharedArray<int> = SharedArray<int>  

Как я могу это исправить?

+0

Если вы можете назначить 'elements' и' weightights', в каком смысле они будут 'const'ant? – Wintermute

+0

Я, действительно, не знаю, этот класс был объявлен в библиотеке Gecode. Я изменяю компилятор и компилирую снова и получаю эту ошибку. – FennFelis

ответ

1

const Пользователи могут быть установлены только во время создания. Вам нужно будет использовать список инициализаторов конструктора, а не двухфазную конструкцию. (Даже тело конструктора не может назначить их)

+0

Как я могу вызвать конструктор в этой функции? Я пытаюсь перегрузить оператор =, но не работает, или я написал неверный код – FennFelis

0

Как упоминалось в @Ben Voigt, вы можете инициализировать const только в списке инициализации конструктора. Это связано с тем, что к тому моменту, когда элемент управления достигнет тела конструктора, все члены класса уже созданы компилятором, используя конструктор по умолчанию.

Следовательно, инициализация члена внутри тела конструктора фактически вызовет конструктор присваивания, который не может быть выполнен для констант, ссылок или объектов, для которых конструктор по умолчанию недоступен.

Смежные вопросы