我如何在DIFFERENT类的私有成员中声明一个指向Class对象数组的指针?

问题描述 投票:0回答:1

在所有其他解决方案中,我对这个问题的不满在很大程度上是由于大量使用载体作为万能药。

让我在开始这个问题时先说我必须使用指针来解决这个问题,尽管它们可能很烦人。我可能不会使用矢量,因为我们的课程材料中没有涉及矢量。

我习惯于以下格式来声明指向数组的指针。

int* numbers;
numbers= new int[10];

Bingo,我刚刚创建了一个包含十个可以存储整数的元素的数组。哇!

现在,我正在尝试创建一个指向对象数组的指针,而不仅仅是一个对象!

我有两节课。一个称为帐户,另一个称为交易。在我的Account类的私有成员中,我需要制作“指向交易数组的指针,用于跟踪为该账户进行的所有交易”为什么要这样做?打败我,这是我的指示,我只是从“帐户”私有成员部分复制并粘贴了它们。

这是我尝试过的方法:

    class Account
{

    private:
        static const int MAX_TRANS = 100;
        int mAcctType;
        int mNumTrans;
        double mAcctBal;
        std::string mAcctName;

    Transaction* transaction;
    transaction = new Transaction[MAX_TRANS];

    void allocate();
    void deallocate();
    void copy(const Account& account);
public: 
    static const int CHECKING = 0;
    static const int SAVINGS = 1;

我不明白自己做错了什么,但收到了一些错误消息。

此部分的第一页:

`   Transaction* transaction;
    transaction = new Transaction[MAX_TRANS];`

我在事务下面得到红色的弯曲,我正在尝试实例化的指针,它指出“声明没有存储类或类型说明符。为什么它不是事务类型?

接下来,我收到以下错误消息。

C2143   syntax error: missing ';' before '*'
C2238   unexpected token(s) preceding ';'   
C4430   missing type specifier - int assumed. Note: C++ does not support default-int    

这是我的交易类的完整代码:

#ifndef TRANSACTION_H
#define TRANSACTION_H

#include"Account.h"
#include <iostream>
#include <string>

class Transaction
{
private:
    int mTransType;
    double mTransAmt;

public:
    static const int DEPOSIT = 1;
    static const int WITHDRAW = 0;
    Transaction();
    Transaction(int mTransType, double mTransAmt);
    int GetTransType() { return mTransType; };
    double GetTransAmt() { return mTransAmt; };
    friend std::ostream &operator<<(std::ostream& out, Transaction transaction);
};

#endif

我不明白为什么我们要这样做,我相信你们中的许多人似乎很荒谬。

我只需要知道用于声明指向不同类的私有成员中的对象数组的指针的正确语法即可。

c++ arrays class pointers private
1个回答
0
投票

我只需要知道用于声明指向不同类的私有成员中的对象数组的指针的正确语法即可。

老实说,我不知道是否存在类似的东西,“指向数组的指针”。在这里:

Transaction* transaction;

transaction是指向单个Transaction的指针。如果您希望它成为动态分配的数组的第一个元素,那就是您的商务。您必须做所有簿记工作:分配正确的大小,根据需要重新分配,遵守rule of 3/5,最后但同样重要的是,请确保您没有泄漏内存。这一切都是噩梦,容易出错,除了折磨学生之外,手动完成所有操作都没有实际用途(对于动态数组,应使用std::vector或智能指针)。似乎看起来像是割裂头发,但重要的是要意识到transaction确实确实指向单个对象,并且如果需要更多的对象,您可以自己决定。

transaction = new Transaction[MAX_TRANS];的问题是,您不能在函数外部的类声明中分配成员。您可以使用构造函数来分配数组。但是,如果您始终分配固定大小的数组,那么首先就不需要动态分配:

class Account {
private:
    static const int MAX_TRANS = 100;
    Transaction transaction[MAX_TRANS];
    // ... more ...
}
© www.soinside.com 2019 - 2024. All rights reserved.