函数调用中的参数太少?

too few arguments in function call?

函数调用中的参数太少?这段代码有什么问题? 我要输出到std::cout天

#include <iostream>
#include <string>

class Date
{
public:
    Date(unsigned _day, unsigned _month, unsigned _year) : day(_day), month(_month), year(_year) {}
    int GetDate(Date& dt)
    {
        return dt.day;
    }
private:
    unsigned day, month, year;
};

int main()
{
    Date dt(07, 10, 2004);
    std::cout << dt.GetDate();

    return 0;
    std::cin.get();
}

我明白了原理,但我不知道该怎么做

/*too few arguments in function call
    Error   C2660   'Date::GetDate': function does not take 0 arguments */

理想情况下,您应该更新 GetDate 函数的实现。

int GetDate()
{
   return day;
}

函数 GetDate 有一个参数,您没有传入函数 main。

应该是

Date a(1,1,2001); 

std::cout << dt.GetDate(a);

您已将 GetDate() 定义为 Date class 的非静态方法,并将显式 Date& 对象引用作为参数。但是 main() 没有将 Date 对象传入该参数,因此出现错误。

无需显式传入对象。作为非静态方法,GetDate() 有一个隐藏的 this 参数,它引用 GetDate() 被调用的 Date 对象。

试试这个:

#include <iostream>
#include <string>

class Date
{
public:
    Date(unsigned _day, unsigned _month, unsigned _year) : day(_day), month(_month), year(_year) {}
    int GetDate() const
    {
        return day; // this->day
    }
private:
    unsigned day, month, year;
};

int main()
{
    Date dt(07, 10, 2004);
    std::cout << dt.GetDate();

    return 0;
    std::cin.get();
}

作为这个成员函数

int GetDate(Date& dt)
{
    return dt.day;
}

是一个非静态成员函数那么当它输出调用它的对象的数据成员日时是很自然的。但是它是用一个参数定义的,该参数接受类型为 Date.

的另一个对象

因此在这个函数的调用中

std::cout << dt.GetDate();

您需要指定类型为 Date 的参数,例如

Date dt(07, 10, 2004);
std::cout << dt.GetDate( dt );

但这没有多大意义。

函数应该定义在class like

int & GetDate()
{
    return day;
}

超载

const int & GetDate() const
{
    return day;
}

在这种情况下,这段代码

Date dt(07, 10, 2004);
std::cout << dt.GetDate();

会有意义。

尽管将函数命名为 GetDay 会更好。

注意这条语句

std::cin.get();

没有效果,因为它位于 return 语句之后。也许你的意思是

std::cin.get();
return 0;