Невозможно правильно вернуть значение из вызова функции в main ()

Я пытаюсь протестировать эту простую функцию, но значения Opt.status, Opt.Year не возвращаются обратно в main (). Зачем? Пожалуйста, помогите, поскольку я новичок в C ++. Я использую Visual C ++ для выполнения этих кодов. Это в моем .cpp файле

#include "stdafx.h"#include "iostream"#include "conio.h"#include "stdio.h"
using namespace std;int main()
{
Easy_Task obj_EasyTask;
TimeDateMonthOptions whatOptions=DATE;
TOptions Opt;
Opt.status=FALSE;
Opt.Year=1970;

printf("Enter code\n");
scanf("%d",&obj_EasyTask.code);

cout << "the code entered is: " << obj_EasyTask.code;
obj_EasyTask.display2(obj_EasyTask.code);

cout << "\nOutput: " << obj_EasyTask.show();

printf("\nEnter the options that you prefer\n");
scanf("%d",&whatOptions);obj_EasyTask.display3(whatOptions, Opt);

cout << "\nOpt.Year: " << Opt.Year;

if(Opt.status)
{
obj_EasyTask.x=(Opt.Year)& 0x00FF;
obj_EasyTask.y=((Opt.Year)& 0xFF00)>>8;
cout << "\nX: " << obj_EasyTask.x;
cout << "\nY: " << obj_EasyTask.y;
obj_EasyTask.Result=(obj_EasyTask.x)*(obj_EasyTask.y);
}char holdWindow;
std::cin >> holdWindow;
return 0;
}uint16_t Easy_Task::display2(uint16_t code)
{
if(code==1)
{
c = 7;
}
else
{
c = 9;
}
return c;

}

uint16_t Easy_Task::display3(TimeDateMonthOptions whtOptions, TOptions Opt)
{
switch(whtOptions)
{
case 0:
case 1:
case 2:
case 3:
Opt.status=TRUE;
cout << "\nStatus1: " << Opt.status;
Opt.Year=1991;
cout << "\nYear1: " << Opt.Year;
break;
case 7:
Opt.status=FALSE;
cout << "\nStatus2: " << Opt.status;
Opt.Year=2013;
cout << "\nYear2: " << Opt.Year;
break;
default:
Opt.status=FALSE;
cout << "\nStatus3: " << Opt.status;
Opt.Year=2010;
cout << "\nYear3: " << Opt.Year;
break;

}
return Opt.status, Opt.Year;

}

В моем .h файле я определил класс следующим образом:

#pragma once

#include "targetver.h"#include <stdio.h>
#include <tchar.h>

typedef unsigned short uint16_t;

#define TRUE 1;
#define FALSE 0;typedef struct TOptions
{
bool status;
uint16_t Year;
};

typedef enum
{
YEAR,
MONTH,
DATE,
HOURS,
MINUTES,
SECONDS,
HUNDRETHS,
UNDEFINED
}TimeDateMonthOptions;class Easy_Task
{
public:

uint16_t code, c, x,y, Result;
uint16_t display2(uint16_t code);

uint16_t show()
{

return c;
};

uint16_t display3(TimeDateMonthOptions whatOptions, TOptions Opt);

};

Проблема у меня есть строка:
если (Opt.status)

Где он не возвращает значение 1, а вместо этого принимает значение по умолчанию, которое было определено ранее. Почему это происходит?

0

Решение

Еще лучше определить функцию для возврата TOptions
TOptions Easy_Task::display3(...); и вернуть структуру.
Помните, что вы можете только вернуться ONE SINGLE возвращаемое значение из функции.

0

Другие решения

Вы должны передать аргумент ссылка:

uint16_t Easy_Task::display3(TimeDateMonthOptions whtOptions, TOptions& Opt)
//^

В противном случае копия Opt сделано и изменено в функции, и вызывающая сторона никогда не увидит изменения.

Обратите внимание, что:

return Opt.status, Opt.Year;

как-то не возвращает два значения. Это использует оператор запятой и вернет значение Opt.Year, Однако, если вы пройдете Opt по ссылке возвращаемое значение не требуется.

1

По вопросам рекламы [email protected]