Базовый тип ссылки на член 'double [10]' не является структурой или объединением - PullRequest
0 голосов
/ 03 октября 2019

Я создал фиксированный массив e_pt[10], инициализированный нулями. Затем я заполнил некоторые значения в массив e_pt. Затем я хотел бы найти индекс самого большого элемента в массиве. Код приведен ниже.

double e_pt[10] = {};

for (size_t lep_i=0; lep_i<lep_n; lep_i++) // loop over leptons
{
    if (lep_type->at(lep_i) == 11)   // record kinematic info of electrons into array
    {
        e_pt[lep_i] = lep_pt->at(lep_i); 
    }

} // end of loop over leptons       

int e_index = std::distance(e_pt.begin(), std::max_element(e_pt.begin(), e_pt.end()));

Однако, когда я пытаюсь скомпилировать это, возникает следующая ошибка:

базовый тип ссылки на элемент 'double [10]' не являетсяструктура или объединение

Указывает, что действие e_pt.begin () недопустимо.

Что здесь не так?

1 Ответ

0 голосов
/ 03 октября 2019

std::max_element(e_pt.begin(), e_pt.end()) У нативного массива нет таких методов.

Это должно быть

std::max_element(std::begin(e_pt), std::end(e_pt));

Эта ошибка относится к использованию. оператор на массиве. Ваш цикл может быть проще, если lep_n имеет размер lep_pt, а lep_pt совместим с контейнером с диапазонами C ++.

size_t lep_i = 0;
for (auto pt : lep_pt)
  if (lep_type->at(lep_i) == 11)   
    e_pt [lep_i++] = pt;

Или наоборот относительно lep_type.

...