【问题标题】:Member reference base type 'std::vector<char> *[10]' is not a structure or union成员引用基类型 'std::vector<char> *[10]' 不是结构或联合
【发布时间】:2019-07-10 01:57:37
【问题描述】:

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

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

有什么想法吗?谢谢。

【问题讨论】:

  • 这是一个指向T 向量的指针数组。如果您希望使用v.push_back,那么它显然不是您想要使用的类型。看来您只是想要一个std::vector&lt;T&gt; v;
  • 你想用std::vector&lt;T&gt;* v[N];做什么?
  • 我正在尝试不使用指针,但会出现同样的错误。
  • 我试图使用这一点,因为编译器会抱怨没有它。它抱怨我的向量未定义或类似的东西。但现在它没有..
  • toBase() 必须分隔孔号的每个数字(如果有意义的话)。例如 7652 = 7, 6, 5, 2。它必须存储在向量 v 中。

标签: c++ class pointers templates vector


【解决方案1】:

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

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

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

【讨论】:

  • 我已经修好了。我忘记了 v 中的 [i]。无论如何,练习说你必须使用 Templeta 类所以:/。谢谢。
  • @Michalistico std::vector&lt;char&gt; 是一个模板类。 使用模板类不同于定义模板类。也许这个练习比你说的要多,但如果你的问题真的是将一个整数分解成它的数字,那么定义一个模板,以及上面代码中的所有其他复杂性,都是不需要的。
  • @Michalistico 想多了。也许重点是抽象数字的概念,所以数字不一定是字符。如果是这样,那么是的template &lt;size_t B, typename T = char&gt; class Number 是有道理的。但是你仍然不需要你正在使用的指针和数组,只需要一个向量。
猜你喜欢
  • 2020-02-01
  • 1970-01-01
  • 2012-05-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-07
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
相关资源
最近更新 更多