недопустимые операнды в двоичном выражении ('std :: ostream' (он же 'basic_ostream <char>') и 'const std :: vector <int>') - PullRequest
0 голосов
/ 16 февраля 2019

У меня следующая проблема.Я просто пытаюсь вывести вектор, но он говорит "недопустимые операнды в двоичном выражении ('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);

}

1 Ответ

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

Похоже, вы перепутали с фигурными скобками.

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

В приведенной выше декларации объявляется массив векторов.Я думаю, что вы хотите объявить вектор с 4 элементами / цифрами.В этом случае вы должны использовать другие скобки:

std::vector<T> v{N};
...