0

我正在使用基于用户输入的 switch 语句来决定调用哪个函数。然后我想将一个类对象传递给一个类函数,其中的代码将填充该类对象的详细信息。以下是我的代码片段:

//main.cpp
void myswitch(int input)
{
    switch (input)
    {
        case 1:
        {
            ElectricityBill eBill;
            ElectricityBill::eBillData(eBill);
            break;
        }
//----------------------------------------------
//bill.h
class ElectricityBill: public Bill
{
    public:
        void eBillData(ElectricityBill eBill);
};
//----------------------------------------------
//bill.cpp
void ElectricityBill::eBillData(ElectricityBill eBill)
{
    //get data
}

我得到的错误是:错误:不能在没有对象的情况下调用成员函数'void ElectricityBill::eBillData(ElectricityBill)'

帮助表示赞赏,在此先感谢。

4

1 回答 1

1

您正在调用一个成员函数eBillData(),因此如果您这样做,将在其上调用该函数的对象将隐式传递给该函数:

ElectricityBill eBill;
eBill.eBillData();

这也许是你真正想要做的。在这种情况下,eBillData不应采用显式参数(将隐式传递指向的指针),并且它将eBill通过隐式指针访问有关调用它的对象的所有必要信息this

#include <string>

class ElectricityBill: public Bill
{
    public:
        void eBillData();
    private:
        std::string something;
};

现在的定义eBillData()当然应该反映上面的声明。请注意,在成员函数中,您可以通过隐式指针访问正在调用该函数的对象的数据成员this,或者(更常见)但仅使用它们的名称而不使用this->间接。例如:

#include <iostream>

void ElectricityBill::eBillData()
{
     // The following two statements are equivalent...
     std::cout << something;
     std::cout << this->something;
}
于 2013-05-10T09:33:13.647 回答