无法从函数返回值[关闭]

Posted

技术标签:

【中文标题】无法从函数返回值[关闭]【英文标题】:Not able to return the value from a function [closed] 【发布时间】:2016-09-23 23:55:13 【问题描述】:

我正在学习 C++ 中的继承并尝试从函数“age”返回值。我得到的只是0。我花了几个小时才弄清楚,但没有运气。这是我下面的代码。对此我将不胜感激!

.h 类

#include <stdio.h>
#include <string>
using namespace std;

class Mother

public:
    Mother();
    Mother(double h);

    void setH(double h);
    double getH();

    //--message handler
    void print();
    void sayName();
    double age(double a);

private:
    double ag;
;

.cpp

#include <iostream>
#include <string>
#include "Mother.hpp"
#include "Daughter.hpp"
using namespace std;

Mother::Mother()

Mother::Mother(double h)

    ag=h;



void setH(double h)
double getH();

void Mother::print()
    cout<<"I am " <<ag <<endl;



void Mother::sayName()
    cout<<"I am Sandy" <<endl;


double Mother::age(double a)

    return a;

主要

#include <iostream>
#include "Mother.hpp"
#include "Daughter.hpp"
using namespace std;

int main(int argc, const char * argv[]) 
    Mother mom;
    mom.sayName();
    mom.age(40);
    mom.print();

    //Daughter d;
    //d.sayName();
    return 0;

【问题讨论】:

Mother::age 是否应该设置为this-&gt;ag?现在你只需退回它。 对不起,我没看懂你们的cmets,能详细点吗?谢谢! 如果您不理解我的评论,听起来您需要进一步学习 C++。在了解继承之前,您应该了解对象、变量、值和方法。 离题:标题中的using namespace std; 通常是个坏主意。现在,包括头球在内的每个人都必须应对后果。什么后果?在这里阅读更多:***.com/questions/1452721/… 离题:Mother.hpp 缺少包括警卫。这会造成无法估量的破坏。更多:***.com/questions/21090041/why-include-guards 和这里:***.com/questions/8020113/c-include-guards 【参考方案1】:

你的 mom.print() 会这样做:

cout<<"I am " <<ag <<endl;

所以这里的问题是:ag = 0

你的 mom.age(40) 会这样做:

return a;

看,它不会将你妈妈的年龄保存到你的 mom 变量中,它只返回你传递的内容(这里是 40 ),那么它怎么打印?

因此,有很多方法可以解决这个问题,如果你想返回你妈妈的年龄,在 main() 中执行 cout

void Mother::age(double a)

    ag = a;

【讨论】:

【参考方案2】:

函数 age 不会将值 a 分配给成员 ag 而是返回它作为参数的值 a 这是一件坏事。 得到我想说的主要写:

cout << mom.age(40) << endl; // 40

为了让它正确改变你的年龄:

double Mother::age(double a)

    ag = a;
    return a; // it's redundant to do so. change this function to return void as long as we don't need the return value

*** 你应该做的另一件事:

将“getters”设为 const 以防止更改成员数据,并且只让“setters”不保持不变。例如在您的代码中:类妈妈:

double getH()const; // instead of double getH() const prevents changing member data "ag" 

【讨论】:

谢谢@Raindrop7。做到了! @familyGuy 欢迎!如果有效,请将其作为可接受的答案【参考方案3】:

您必须正确使用 setter 和 getter。使用 setter 像这样更改年龄:

void setAge(const double &_age) 
    ag = _age;

如果要检索值,请使用 getter。

double getAge() const 
    return ag;
 

【讨论】:

以上是关于无法从函数返回值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从函数中获取值而不返回它? [关闭]

如何从函数返回多个值? [关闭]

使用 PyQt5“更新”从具有多个参数的函数中销毁返回值 [关闭]

无法访问从 OpenCV 函数返回的 Mat 值

Python:无法从函数中读取返回值

socket文件异常后select返回值