【问题标题】:For Loop Method CallFor循环方法调用
【发布时间】:2019-06-16 12:16:31
【问题描述】:

弹出一个错误说类类型不提供下标运算符。

我是 C++ 新手,似乎无法弄清楚这一点。如果您向我提供一些提示以及在问题之外我的代码哪里出了问题,我将非常感激。

  class Transaction {
    protected:
        char * ime;
        char smetka[16];
        float iznos;
        Date d;
    public:
        Transaction() {}
        Transaction( char * ime , char * smetka  ,float iznos ,Date d ) {
            this->ime  = new char[strlen(ime)+1];
            strcpy(this->ime,ime);
            strcpy(this->smetka,smetka);
            this->iznos=iznos;
            this->d=d;
        }

    Transaction(const Transaction & c) {
        ime  = new char[strlen(ime)+1];
        strcpy(this->ime,c.ime);
        strcpy(this->smetka,c.smetka);
        this->iznos=c.iznos;
        this->d=c.d;
    }

    friend ostream & operator<<(ostream & out, const Transaction & c) {
        if(c.iznos>0) {
            return out << "Inflow " << c.iznos   << " " << c.ime   << "(" << c.smetka << ")-" << c.d.getDay() << "." << c.d.getMonth() << "." << c.d.getYear() << endl;
        } else {
            return out << "Outflow " << c.iznos   << " " << c.ime   << "(" << c.smetka << ")-" << c.d.getDay() << "." << c.d.getMonth() << "." << c.d.getYear() << endl;
        }
    }

    Transaction(char * ime, char * smetka) {
        this->ime = new char[strlen(ime)+1];
        strcpy(this->ime,ime);
        strcpy(this->smetka,smetka);
    }
};


class TransactionAccount {
private:
    char * ime;
    char smetka[16];
    Transaction * t;
    int n;
    int kapacitet;
public:
    TransactionAccount() {
        this->t = new Transaction[3];
        this->kapacitet=3;
    }

    TransactionAccount(char * ime,char * smetka) {
        this->ime = new char[strlen(ime)+1];
        strcpy(this->ime,ime);
        strcpy(this->smetka,smetka);
    }


    void addTransaction(Transaction & a) {
        if(n<kapacitet) {
            this->t = &a;
        } else {
            kapacitet*=2;
            this->t = &a;
        }
    }

    Transaction getTransList() {
        return *t;
    }

    int getTransCapacity() {
        return this->kapacitet;
    }
    int getTransNumber() {
        return this->n;
    }
    virtual ~TransactionAccount() {}
};



int main() {

    char name[50],number[16];
    float amount;
    int d,m,y;
    int n;
    bool isInflow;
    TransactionAccount ta;
    int testcase;
    cin>>testcase;

    switch (testcase) {
    case 1: {
        cout<<"------Transaction test------"<<endl;
        cin>>name;
        cin>>number;
        cin>>amount;
        cin>>d>>m>>y;
        Transaction t(name,number,amount,Date(d,m,y));
        cout<<t;
    }
    break;
    case 2: {
        cout<<"------TransactionAccount test:constructor, desctuctor & get- 
        functions------"<<endl;
        cin>>name;
        cin>>number;
        TransactionAccount ta(name,number);
        cin>>n;
        for (int j=0; j<n; j++) {
            cin>>name>>number>>amount>>d>>m>>y;
            Transaction t(name,number,amount,Date(d,m,y));
            ta.addTransaction(t);
        }
        cout<<"Capacity: "<<ta.getTransCapacity()<<endl;
        cout<<"Number of elements: "<<ta.getTransNumber()<<endl;  

                     cout<<(ta.getTransList())[n];  // -- here is the 
                                                     problem                               
        cin>>n;
        cout<<"The element on position "<<n<<" is "<<endl;    

    }
     return 0;
}

我想要的结果是它调用前一个对象(类的)并打印它。

【问题讨论】:

  • 在哪一行弹出错误?
  • 在案例2末尾添加评论
  • getTransList 需要返回t,而不是*t
  • 欢迎来到 Stack Overflow。请查看我们的help section,并关注minimal complete examples 上的页面。您发布了大量代码,其中大部分似乎与问题无关,目前尚不清楚您希望那条麻烦的行做什么。
  • 交易 * t;是一个动态分配的数组,如果我尝试返回 t;它说:从交易 * t 到 t 没有可行的转换;

标签: c++ loops class methods call


【解决方案1】:

这个特定问题的答案是getTransList 返回一个Transaction(而不是顾名思义的“列表”)。然后会发生错误,因为Transaction 没有重载的下标运算符(这很好;它可能不应该)。

Transaction getTransList() {
    return *t;
}

应该替换为

Transaction* getTransList() {
    return t;
}

正确返回数组。

但是,提供的代码还存在许多其他问题。当您尝试运行/调试代码时,有些会变得明显;其余的,虽然您当然可以就本网站的具体问题提出(新的)问题,但最好咨询您的老师。

【讨论】:

    猜你喜欢
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2018-11-07
    • 2015-06-28
    • 1970-01-01
    • 2020-05-03
    相关资源
    最近更新 更多