【问题标题】:Error trying to average the elements of a linked list尝试平均链表的元素时出错
【发布时间】:2021-12-27 23:10:19
【问题描述】:

我想计算链表中元素的平均值:

.h

class List
{
public:
    List() { head = NULL; }
    void insertNode(int);//inserare nod la sfarsitul unei liste
    void printList();//afisare lista
    void deleteNode(int);
    void medie(float);

.cpp

void List::medie(float) {
    int count = 0;
    int sum = 0;
    int media = 0;
    Node* temp3 = head;
    while (temp3 != NULL) {
        count++;
        sum += temp3->val;
        temp3 = temp3->next;
    }
    media = (double)sum / count;
    return media;
}

我收到了这个错误:

返回值类型与函数类型不匹配

我不知道如何修复它。

【问题讨论】:

  • 你声明了一个没有返回值的函数,那么你想用return media;做什么?
  • 我猜你还没有了解到这段代码中的许多voids 都是返回类型。您承诺返回 void 类型,然后尝试返回 int
  • @my_name 也不使用函数参数。为什么会出现?
  • 此外,此代码会带来许多错误head 是什么? Node 是什么? val 是什么?这不是minimal reproducible example
  • 无论您是想练习自建数据类型还是正在为实际应用程序寻找解决方案:不要滚动您自己的容器,使用标准容器——然后学习所有内容有必要了解<algorithm>...——此外,您的代码迟早被来自不同国家/地区的人阅读。英语是标识符和 cmets 的最佳选择。

标签: c++ linked-list average singly-linked-list function-definition


【解决方案1】:

函数声明为返回类型void

void medie(float);

所以这意味着它什么也不返回。但是在函数定义中有一个带有非 void 表达式的 return 语句。

return media;

因此编译器会发出错误消息。

函数参数也不在函数内使用。它的声明没有意义。

在此声明中

media = (double)sum / count;

将变量sum 转换为double 类型没有什么意义,因为结果被分配给具有int 类型的变量media

函数的声明方式如下

double medie() const;

并定义为

double List::medie() const
{
    double sum = 0.0;
    size_t count = 0;

    for ( const Node *temp = head; temp != nullptr; temp = temp->next )
    {
        sum += temp->val; 
        ++count;
    }

    return count == 0 ? 0.0 : sum / count;
}

【讨论】:

    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多