【问题标题】:error: request for member ‘size’ in ‘list1’, which is of non-class type ‘float*’错误:请求“list1”中的成员“size”,它是非类类型“float*”
【发布时间】:2020-03-24 08:37:17
【问题描述】:

my.cpp:在函数‘float minOfList(float*)’中: my.cpp:25:35: 错误:请求‘list1’中的成员‘size’,它是非类类型‘float*’ for (int item=1; item

minOfList 是一个应该采用浮点值数组的函数。显然,由于某种原因,它似乎无法获得数组的大小。我不确定为什么。这是完整的功能:

float minOfList(float *list1) {
   float lowest = list1[0];
   float lowest2 = 0.0;
   for (int item=1; item < list1.size(); item++) {
      if (list1[item]<lowest) {
         lowest2 = lowest;
         lowest = list1[item];
    }
}
return lowest, lowest2;

}

有什么想法可能是错的吗?

【问题讨论】:

  • 因为 float 是原始的非类类型,你应该传递另一个参数,比如 'int list_size'

标签: c++ arrays


【解决方案1】:

size() 方法仅适用于 STL 容器(std::vectorstd::list 等)。您的 list1 只是一个指向 float 的指针(可能指向浮点数组)。

C 风格的数组通常不知道自己的长度(与 STL 容器不同)。更好的解决方案是使用 STL 容器,但如果做不到这一点,则需要将 length 作为单独的参数传入。

【讨论】:

    【解决方案2】:

    指针没有名为size 的成员。 minOfList 中有一个指针,而不是数组。您不能将数组按值传递给函数。

    不要使用 C 样式数组,而是使用 std::vector&lt;float&gt;,它确实有一个名为 size 的成员,但也允许您使用 range-for

    此外,您没有返回两个值,而是在 return 语句中丢弃了一个值。

    std::pair<float, float> min2OfList(const std::vector<float> & list1)
    {
        // check list1.size() > 1?
    
        float lowest = list1[0];
        float lowest2 = 0.0;
        for (float value : list1)
        {
            if (value < lowest) {
                lowest2 = lowest;
                lowest = value;
            }
        }
        return { lowest, lowest2 };
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多