如何将对象放在结构中

时间:2011-12-04 17:51:36

标签: c++ class object struct

制作新物品的正常方法:

std::string date1 = "10/1/2010"; Date d1(stringToChar(date1);

但我无法弄清楚如何在结构中使用它。结构:

struct RecPayments
{
    std::string name;
    Date datemake();
    float cost;
};

试着像这样使用它:

void addRecurring()
{
    //New recurring payment
    RecPayments * newPaymentItem = new RecPayments;

    //Set recurring payment properties
    newPaymentItem->name = "Test Payment";
    newPaymentItem->datemake(stringToChar("4/12/2011"));
    newPaymentItem->cost = 5;
}

收到错误:

error: no matching function for call to ‘RecPayments::datemake(const char*)

这样做的正确方法是什么?

4 个答案:

答案 0 :(得分:5)

好吧,编译器是对的。你使用struct的方式给了你(实际上)一个类。您声明了一个函数RecPayments::datemake(),但从未在任何地方定义它。更重要的是,你甚至没有调用你创建的这个版本的函数 - 你发送了一个它没想到的参数。

您需要删除您声明的datemake变量中的(),或者从中创建一个完整的函数。我不确定你想问哪一个。

答案 1 :(得分:2)

()中的大括号Date datemake();让编译器感到困惑。

删除它们。

如果你想用非默认的c'tor在Date里面显式创建addRecurring()对象,那么把它作为一个指针并创建它。

struct RecPayments
{
    std::string name;
    Date* date;
    float cost;
};

void addRecurring()
{
    //New recurring payment
    RecPayments * newPaymentItem = new RecPayments;

    //Set recurring payment properties
    newPaymentItem->name = "Test Payment";
    newPaymentItem->date = new Date(stringToChar("4/12/2011"));
    newPaymentItem->cost = 5;
}

显然,当您使用new时,您现在也需要某处delete或使用智能指针..

答案 2 :(得分:1)

std::string date1 = "10/1/2010";

是使用重载运算符=的初始化。

Date d1(stringToChar(date1);

是构造函数的初始化。

struct RecPayments
{
    std::string name;
    Date datemake();
    float cost;
};

Date datemake();是函数的声明,它返回Date,而不是Date类型的成员字段。所以你需要删除那些括号。

另外

newPaymentItem->datemake(stringToChar("4/12/2011"));

是一个函数调用,但你真正想做的就是一个赋值。所以它应该更改为newPaymentItem->datemake = stringToChar("4/12/2011");后者意味着您的Date类具有适当的运算符=重载。如果没有超载,那么您可能会说newPaymentItem->datemake = Date(stringToChar("4/12/2011");)在这种情况下会自动重载运算符=

答案 3 :(得分:1)

Date datemake();

这被定义为不带参数的函数。当你把它称为

newPaymentItem->datemake(stringToChar("4/12/2011"));

你将字符串从stringToChar()传递给你的函数datemake()。

您可以做的是首先在结构中创建一个Date变量

Date date;

然后将其值指定为

newPaymentItem->date = stringToChar("4/12/2011");