二进制表达式的无效操作数('std :: ostream'(又名'basic_ostream) ')和'const std :: vector “)

问题描述 投票:0回答:1

我有以下问题。我只是想输出一个向量,但它说“二进制表达式的无效操作数('std :: ostream'(又名'basic_ostream')和'const std :: vector')”

码:

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




template <size_t B, size_t N, typename T = int>
class Number
{

  private:
   std::vector<T> v[N]; // Vector que contendrá el numero desglozado
   void toBase(int valor);

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


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



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



template <size_t B, size_t N, typename T>
std::ostream& Number<B,N,T>::write(std::ostream& os) const
{
  for(int i = 0; i < N; i++){
    os << v[i] << std::endl;
   }
}

我认为问题是我试图用简单的for循环输出向量。所以我试图用ostream输出它,但我有同样的错误。所以我认为ostream是好的。只是输出向量是问题,我不知道为什么。有任何想法吗?谢谢!

主要:

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

#include "number.hpp"


int main() {

Number<2,10> N1(100);
Number<2,10> N2(200);

}
c++ templates vector ostream
1个回答
1
投票

看起来你和大括号混淆了。

std::vector<T> v[N];

上面的声明声明了向量数组。我想你要声明一个带有4个元素/数字的向量。在这种情况下,您必须使用其他大括号:

std::vector<T> v{N};
© www.soinside.com 2019 - 2024. All rights reserved.