C++ Can';t从对main()的函数调用中正确返回值

C++ Can';t从对main()的函数调用中正确返回值,c++,visual-c++,C++,Visual C++,我正在尝试测试这个简单的函数,但是Opt.status、Opt.Year值不会返回到main()。为什么?请帮助我作为新的C++。我使用VisualC++来执行这些代码。这是在我的.CPP文件中。 #include "stdafx.h" #include "iostream" #include "conio.h" #include "stdio.h" using namespace std; int main() { Easy_Task obj_EasyTask; Tim

我正在尝试测试这个简单的函数,但是Opt.status、Opt.Year值不会返回到main()。为什么?请帮助我作为新的C++。我使用VisualC++来执行这些代码。这是在我的.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;

}
#包括“stdafx.h”
#包括“iostream”
#包括“conio.h”
#包括“stdio.h”
使用名称空间std;
int main()
{
简单的任务和简单的任务;
TimeDateMonthOptions whatOptions=日期;
Topions Opt;
选择状态=错误;
选择年份=1970年;
printf(“输入代码”);
scanf(“%d”和&obj_EasyTask.code);

cout您需要通过引用传递参数:

否则,将在函数中创建并修改
Opt
,调用者将永远看不到更改

请注意:

return Opt.status, Opt.Year; 

不会以某种方式返回两个值。这将使用并返回值
Opt.Year
。但是,如果通过引用传递
Opt
,则不需要返回值。

最好还是定义一个函数来返回选项
TOptions Easy_Task::display3(…);
并返回一个结构。

请记住,您只能从函数中返回一个返回值。

可能不是问题的原因,但您正在为那些带有
的邪恶宏自找麻烦。只需摆脱它们并使用内置的
true
false
值。您也会过得更好学习C++,而不是1990 C和C++的可怕混合。只是一个旁注,在C++中,这是非法的。代码>返回opt状态,opt。年;< />代码。不能返回一个以上的项目。将其改为<代码>返回STD::;
@Hindol:它不是非法的,只是无用且容易混淆。返回
Opt
,或者通过引用将其修改到位(这似乎是下面代码所期望的)@Mike,说得好。我在编写代码时忽略了“;”。非常感谢您的注释。这很有帮助。引用是缺少的一部分:)即使通过引用传递参数并打算修改它的解决方案也能奏效,但这会造成不好的做法:1)在编程中修改参数被认为是一种副作用,2)函数应该ept参数的数量并返回结果。而且您应该真正学会从一开始就做好编程,让其他人更容易理解您的代码。。。
uint16_t Easy_Task::display3(TimeDateMonthOptions whtOptions, TOptions& Opt) 
                                                                    //^
return Opt.status, Opt.Year;