首页 > 解决方案 > 成员引用基类型 'std::vector*[10]' 不是结构或联合

问题描述

我有以下问题:我正在尝试在课堂上进行一些简单的推动,但它没有用..

 #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 因为它是一个指针?我不知道..

有任何想法吗?谢谢你。

标签: c++classpointerstemplatesvector

解决方案


你让这种方式变得比它需要的更复杂,只是让自己感到困惑。把你的班级改成这个

 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;
 };

您正在尝试将数字拆分为数字并将它们放入向量中。所以只需用上面的向量编写一个简单的类。您尝试执行的操作不需要模板、指针或数组。


推荐阅读