2015-10-20 2 views
0

Это, наверное, глупый вопрос, но я не могу решить эту проблему.передать параметр объекта как const и прочитать его

У меня есть объект под названием уравнения, где внутри определена матрица с именем X.

В основном, мне нужно вызвать функцию с именем F, где мне нужно передать матрицу как Уст. Мне нужно получить доступ к определенной позиции матрицы (я не хочу писать, просто хочу прочитать).

я сделать следующее:

vec f(cx_mat const*X) 
{ 
cout << “X[12][12] = “ << *X(12,12) << endl; 
} 

И это не работает. Если да, то:

vec f(cx_mat const*X) 
{ 
mat X_temp; 
X_temp = *X; 
cout << “X[12][12] = “ << X_temp(12,12) << endl; 

} 

Я работаю, и я не могу понять почему !!! Вы можете мне помочь?

+2

Это просто идея: это может зависеть от приоритета оператора. Попробуйте 'cout <<" X [12] [12] = "<< (* X) (12,12) << endl;' –

ответ

2

Попробуйте (* X) (12,12) вместо этого.

Оператор вызова функции «()» имеет более высокий приоритет, чем оператор направления «*».

0

В вашем втором примере вы создаете копию объекта mat, которая не вызывает никаких неконстантных методов X. Это на самом деле решение вашей проблемы, хотя и не очень эффективное - я бы предпочел избежать ненужные копии.

Итак, скорее всего, класс мата имеет оператор = (const mat &) функция определена.

Помимо подхода, который вы нашли есть и другие возможности:

  1. Если вы в состоянии изменить класс коврик, вы можете сделать оператор() подпись Уст. Это решит проблему.

  2. Если вы не можете изменить интерфейс мата, лучше изменить подпись f на ссылку на неконстантный параметр, так как без возможности изменения интерфейса мата вы не можете гарантировать, что оператор() не изменит состояние X ,

  3. Использование const_cast. Я настоятельно рекомендую не использовать это. Я упоминаю его здесь только для полноты.

+0

Большое спасибо обоим. Оно работает! – NunodeSousa

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