Базовый тип ссылки на член 'std :: vector <char>* [10]' не является структурой или объединением - PullRequest
0 голосов
/ 16 февраля 2019

У меня следующая проблема: я пытаюсь сделать простой толчок в своем классе, но он не работает ..

 #include <stdio.h>
 #include <iostream>
 #include <vector>

 template <size_t B, size_t N, typename T = char>
 class Number
 {
   private:
     std::vector<T>* v[N];
     int toBase(int valor);

   public:
     Number(int valor);
     Number <B,N,T> suma(const Number<B,N,T>& sumando) const;
    //ostream& write(ostream& os)const;
 };

 template <size_t B, size_t N, typename T>
 Number<B,N,T>::Number(int valor)
 {
   toBase(valor);
 }


 template <size_t B, size_t N, typename T>
 int Number<B,N,T>::toBase(int valor)
 {
    for(int i = 0; i < N; i++) {
     int aux = valor % B;
     v.push_back(aux); // PROBLEM HERE
   }
 }

  template <size_t B, size_t N, typename T>
  Number<B,N,T> Number<B,N,T>::suma(const Number<B,N,T>& sumando) const
  {
    //sumando.toBase();
  }

Компилятор говорит "базовый тип ссылки на элемент" std :: vector *[10] 'не является структурой или объединением v.push_back (aux); "

Я думаю, что проблема начинается с моего вектора * v.Может быть, я не могу использовать push_back, потому что его указатель?Я не знаю ..

Есть идеи?Спасибо.

1 Ответ

0 голосов
/ 16 февраля 2019

Вы делаете этот путь более сложным, чем нужно, и просто путаете себя.Измените свой класс на этот

 class Number
 {
   private:
     std::vector<char> v;
     int toBase(int valor);

   public:
     Number(int valor);
     Number suma(const Number& sumando) const;
    //ostream& write(ostream& os)const;
 };

Вы пытаетесь разбить число на цифры и поместить их в вектор.Так что просто напишите простой класс с вектором, как указано выше.Для того, что вы пытаетесь сделать, не требуются шаблоны, указатели или массивы.

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