函数未收到值

use*_*148 1 c++ function

因此,我正在尝试制作一个程序,该程序需要一些输入秒的随机数,并将其转换为Days,Hours,Minutes和Seconds.我不得不使用符号常量来定义一天中的小时数,一小时内的分钟数和一分钟内的秒数.我通过了价值,但它没有被收到,所以我最终得到了一些巨大的负数.这是代码.如果有人能告诉我问题所在,我会感激不尽.

我在函数定义代码中使用了随机位代码来观察是否收到了总秒数,而不是它.

#ifndef SECONDS_H_
#define SECONDS_H_

#define HOURS_IN_DAY 24
#define MINUTES_IN_HOUR 60
#define SECONDS_IN_MINUTES 60

#include <iostream>

using namespace std;

class Seconds
{
private:
    long totalSeconds;
public:
    Seconds();
    ~Seconds(){};
    Seconds(int totalSeconds);
    void Seconds::convertSeconds(int &days, int &hours, int &minutes, int &seconds);
};

#endif
Run Code Online (Sandbox Code Playgroud)

...

#include <conio.h>
#include <string>
#include <iostream>
#include "seconds.h"

#define HOURS_IN_DAY 24
#define MINUTES_IN_HOUR 60
#define SECONDS_IN_MINUTE 60

Seconds::Seconds(int totalSeconds)
{
    totalSeconds = totalSeconds;
}

void Seconds::convertSeconds(int &days, int &hours, int &minutes, int &seconds)
{   
    cout << endl;
    cout << "Total Seconds: " << totalSeconds;
    cout << endl;

    days = totalSeconds / MINUTES_IN_HOUR / SECONDS_IN_MINUTE / HOURS_IN_DAY;
    hours = (totalSeconds / MINUTES_IN_HOUR / SECONDS_IN_MINUTE) % HOURS_IN_DAY;
    minutes = (totalSeconds / MINUTES_IN_HOUR) % SECONDS_IN_MINUTE;
    seconds = (totalSeconds % SECONDS_IN_MINUTE);

}
Run Code Online (Sandbox Code Playgroud)

...

#include <iostream>
#include <conio.h>
#include <string>
#include "seconds.h"

#define HOURS_IN_DAY 24
#define MINUTES_IN_HOUR 60
#define SECONDS_IN_MINUTES 60

using namespace std;

int main ()
{
    int totalSeconds;
    int days = 0, hours = 0, minutes = 0, seconds = 0;

    cout << "Enter a random massive amount of seconds: ";
    cin >> totalSeconds;

    Seconds sec(totalSeconds);

    sec.convertSeconds(days, hours, minutes, seconds);

    cout << "That is equivalent to " << days << " days, " << hours << " hours, " << minutes << " minutes, " << seconds << " seconds." << endl;

    cout << "Press any key to continue...";
    cin.sync();
    _getch();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

M.M*_*M.M 5

这是个问题:

Seconds::Seconds(int totalSeconds)
{
    totalSeconds = totalSeconds;
}
Run Code Online (Sandbox Code Playgroud)

函数参数totalSeconds隐藏了类成员,所以这段代码就像在做x = x;,它没有任何影响this->totalSeconds.

要解决此问题,请使用不同的变量名称,或者最好使用构造函数初始化语法:

Seconds::Seconds(long totalSeconds)
   : totalSeconds(totalSeconds)
{
}
Run Code Online (Sandbox Code Playgroud)

在此版本中,不会发生阴影,因为构造函数初始化列表是智能的.