Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C++代码中获得哑值而不是期望值_C++_Eclipse_Iostream - Fatal编程技术网

在C++代码中获得哑值而不是期望值

在C++代码中获得哑值而不是期望值,c++,eclipse,iostream,C++,Eclipse,Iostream,我在理解为什么我的代码为我提供了一些虚拟值时遇到了问题 有人能帮我找出我的错在哪里,原因是什么 #include <stdio.h> #include <iostream> class mypair { public: int a,b; public: int print (int first , int second) { a = first; b = second; std::cout<

我在理解为什么我的代码为我提供了一些虚拟值时遇到了问题

有人能帮我找出我的错在哪里,原因是什么

#include <stdio.h>
#include <iostream>

class mypair
{
public:
    int a,b;

public:

    int print (int first , int second)
    {
        a = first;
        b = second;
        std::cout<<a <<" hello "<<b;
    }

    int getmax();
};

int mypair ::getmax()
{
    int res;
    res = (a>b)?a:b;
    std::cout<<res;
    return res;
}

int main ()
{
    mypair abc;

    std::cout<<abc.print(5,6);
    std::cout<<abc.getmax();
}
print不返回任何值,但应返回一个int。这是UB,您的伪值是由此产生的

此外,在print和getmax中,您都将输出发送到cout。在getmax的情况下,此输出将立即在返回值的输出之前进行预编码,导致相同的数字显示两次,没有任何空格或分隔符

print不返回任何值,但它应该返回一个int。这是UB,您的伪值是由它引起的


此外,在print和getmax中,您都将输出发送到cout。在getmax的情况下,此输出将立即在返回值的输出之前进行预编码,导致相同的数字显示两次,没有任何空格或分隔符

您应该打开编译器警告。它会告诉您,您不会从mypair::print返回任何内容,但您应该返回一个int。5 hello 6629564866从答案开始,您将打印两次max number。试着自己调试它:应该打开编译器警告。它会告诉您,您不会从mypair::print返回任何内容,但您应该返回一个int。5 hello 6629564866从答案开始,您将打印两次max number。尝试自己调试:@john将打印类型设置为void notint@Rietty这是一个非常合理的选择。但是,他不能再在cout中将其用作表达式。@Rietty非常感谢,但如果我将打印作为void,那么我将无法得到错误的答案:void值不会被忽略,因为它应该被忽略be@john的确但我认为Rietty想说的是,函数名print表示直接调用它来打印某些内容,而不在cout表达式中使用它。@Christophe非常感谢。我明白了,但如果我将print函数的名称更改为其他名称,仍然会继续提供伪值。如果我使用构造函数而不是print函数,那么我可以解决这个问题,这样我就可以得到准确的值,但我仍然感到困惑的是,为什么用现有的方法,我会遇到传递伪值的问题。@john将打印类型设为void notint@Rietty这是一个非常合理的选择。但是,他不能再在cout中将其用作表达式。@Rietty非常感谢,但如果我将打印作为void,那么我将无法得到错误的答案:void值不会被忽略,因为它应该被忽略be@john的确但我认为Rietty想说的是,函数名print表示直接调用它来打印某些内容,而不在cout表达式中使用它。@Christophe非常感谢。我明白了,但如果我将print函数的名称更改为其他名称,仍然会继续提供伪值。我可以解决这个问题,如果我使用构造函数而不是print函数,这样我就可以得到精确的值,但我仍然感到困惑的是,为什么用现有的方法我会遇到传递伪值的问题。