【问题标题】:invalid operands to binary expression ('std::ostream' (aka 'basic_ostream<char>') and 'const std::vector<int>')二进制表达式的无效操作数('std::ostream'(又名'basic_ostream<char>')和'const std::vector<int>')
【发布时间】:2019-07-10 07:35:29
【问题描述】:

我有以下问题。我只是想输出一个向量,但它说“二进制表达式的操作数无效('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);

}

【问题讨论】:

  • v 是一个向量的数组,对于初学者来说。
  • v 是一个向量的array,对于初学者来说。向量不带有operator&lt;&lt;() ...
  • std::cout &lt;&lt; write() 还有一个问题,write 是一个不返回任何内容的非 void 函数。
  • 又是同样的数组/向量混淆。如果你真的认为你需要一个向量数组,那么你将不得不编写两个循环,一个通过数组的外部循环和一个通过向量的内部循环。
  • 我知道什么是向量。我不明白你的意思。

标签: c++ templates vector ostream


【解决方案1】:

您似乎对大括号感到困惑。

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

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

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

【讨论】:

  • 我不明白。你是说,例如,如果我想创建一个大小为 N 的 int 数字向量,那么“std::vector v[N];”是错误的吗?我必须使用大括号,例如“ std::vector v{N}; ”?
  • @Michalistico 是的,它错了
  • 是的,您理解正确。作为类的成员,您应该使用 {N}。但作为函数的局部变量,您也可以使用 (N)。
  • @Michalistico 一个整数向量,就是这个std::vector&lt;int&gt; v;。这是一个大小为零的向量,您可以使用push_back 添加整数。如果你想要一个以 N 开头的向量,那么它就是 std::vector&lt;int&gt; v{N};std::vector&lt;int&gt; v(N);。那么你就不需要使用push_back
  • 我明白.. 所以迷失在 C++ 中。谢谢你们,soz 的愚蠢帖子:/
猜你喜欢
  • 2016-05-08
  • 2021-09-09
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-27
相关资源
最近更新 更多