【问题标题】:C++ For Loop: invalid operands to binary expression [closed]C ++ For循环:二进制表达式的无效操作数[关闭]
【发布时间】:2014-10-25 17:57:11
【问题描述】:

我试图将数据从一个向量复制到另一个向量,但是当我尝试编译以下 for 循环时出现错误,“二进制表达式 'int' 和 'Card' 的操作数无效”:

for (int i = 0; i <= vectorOne[vecCapacity]; i++) { //step 3
                vectorTwo[i] = vectorOne[i];
   }

有人有什么建议吗?

【问题讨论】:

  • vectorOne是如何定义的?
  • 这应该是对std::copystd::copy_n 的一次调用。
  • 不能使用std::copy,这是一个有具体说明的赋值。 vectorOne 是一个 T*,在较早的函数中它是动态分配的,T*vector One; vectorOne = new T[vecCapacity]
  • 所以它甚至不是真正的向量!克里基。

标签: c++ for-loop


【解决方案1】:

我相信你的意思是

for (int i = 0; i <= vecCapacity; i++)

甚至更有可能

for (int i = 0; i < vecCapacity; i++)

【讨论】:

    【解决方案2】:

    错误信息很清楚:在这个循环中

    for (int i = 0; i <= vectorOne[vecCapacity]; i++) { //step 3
                    vectorTwo[i] = vectorOne[i];
       }
    

    i 的类型为 int,而 vectorOne[vecCapacity] 的类型为 Card,并且这些类型没有定义运算符

    所以这个循环没有意义。

    也许你的意思

    for (int i = 0; i < vecCapacity; i++) { //step 3
                    vectorTwo[i] = vectorOne[i];
       }
    

    还要考虑到你要保证vectorTwo的大小不小于vectorOne的大小或者至少vecCapacity

    您可以使用标头&lt;algorithm&gt; 中声明的标准算法std::copy

    例如

    #include <algorithm>
    
    //...
    
    std::copy( vectorOne, vectorOne + vecCapacity, vectorTwo );
    

    【讨论】:

      【解决方案3】:

      你应该从 0 循环到 vectorOne 的大小。

      for (int i = 0; i < vectorOne.size(); i++) { //step 3
                      vectorTwo[i] = vectorOne[i];
         }`
      `
      

      另外,如果您这样做,请确保在循环之前 vectorTwo 足够大。

      vectorTwo.resize(vectorOne.size());
      

      【讨论】:

      • @Deduplicator 谢谢,我更新了答案。
      猜你喜欢
      • 1970-01-01
      • 2016-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 2017-06-03
      相关资源
      最近更新 更多