如何将对象放在结构中

nat*_*tli 4 c++ struct class object

制作新对象的常规方法:

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

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

struct RecPayments
{
    std::string name;
    Date datemake();
    float cost;
};
Run Code Online (Sandbox Code Playgroud)

试着像这样使用它:

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;
}
Run Code Online (Sandbox Code Playgroud)

收到错误:

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

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

sem*_*ght 5

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

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


Kas*_*yap 4

()你的大括号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;
}
Run Code Online (Sandbox Code Playgroud)

显然,当您使用时new,您现在还需要delete某个地方..或使用智能指针..