Проблема с объявлением защищенного указателя на вектор - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь объявить указатель на std::vector<int> в производном классе в C ++. Этот класс снова является базовым для других классов.

Моя попытка была следующей:

protected:
   std::vector<CustomClass> *mypointer;

Однако, когда я скомпилировал его, я получил следующую ошибку:

error: no match for ‘operator=’ (operand types are ‘std::vector<int>’ and ‘std::vector<int>*’)
error: no match for ‘operator*’ (operand type is ‘std::vector<int>’)

и некоторые другие операнды отсутствуют.

Я довольно невежественен, в чем проблема вообще. Должен ли я реализовать все эти функции в текущем классе? Если так, почему я должен это делать?

Для тех, кому требуется больше контекста, я хочу реализовать этот указатель в классе CbmStsSensor (находится здесь) , который происходит от CbmStsElement.

Редактировать: некоторые соответствующие классы можно найти здесь CbmStsElement.h и здесь введите описание ссылки здесь .

Edit2: весь журнал ошибок компиляции здесь .

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Проблема была не в самом коде c ++, а в используемой платформе, в данном случае ROOT. Если вы определяете указатель в классе ROOT, вы должны указать программе, что делать с этим указателем в случае записи класса в файл. Даже если класс никогда не будет записан в файл (как в моем случае). В этом конкретном c случае (класс никогда не записывается в файл), вы можете просто сказать ROOT игнорировать данный указатель, добавив //! после объявления, например, напишите

protected:
   std::vector<CustomClass> *mypointer; //!

Спасибо всем за помощь в этом беспомощном деле!

0 голосов
/ 17 февраля 2020

Сообщения об ошибках достаточно четкие. Например, где-то в коде вы пытаетесь назначить указатель на объект типа std::vector<int> * на объект типа std::vector<int>.

Вот демонстрационная программа, которая показывает, как это сообщение об ошибке может быть сгенерированным.

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> v1;
    std::vector<int> v2;

    v1 = &v2;

    return 0;
}

Ошибка компиляции:

prog.cpp: In function ‘int main()’:
prog.cpp:9:8: error: no match for ‘operator=’ (operand types are ‘std::vector<int>’ and ‘std::vector<int>*’)
  v1 = &v2;
        ^~

Или (относительно второго сообщения об ошибке) не существует одинарного operator * для объектов типа std::vector<int>.

Вот еще одна демонстрационная программа

#include <iostream>
#include <vector>

int main() 
{
    std::vector<int> v;

    *v;

    return 0;
}

сообщение об ошибке:

prog.cpp: In function ‘int main()’:
prog.cpp:8:2: error: no match for ‘operator*’ (operand type is ‘std::vector<int>’)
  *v;
  ^~

Возможно, вы должны объявить элемент данных как имеющий тип std::vector<int> вместо тип указателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...