C++ 如何在不同类的私有成员中声明指向类对象数组的指针?
我对这个问题的恼怒在很大程度上是由于在所有其他解决方案中大量使用矢量作为万灵药而加剧的 让我在这个问题之前说,我需要使用指针来解决这个问题,尽管它们可能很烦人。我可能不会使用vector,因为我们的课程材料中没有涉及它 我习惯于使用以下格式声明指向数组的指针C++ 如何在不同类的私有成员中声明指向类对象数组的指针?,c++,arrays,class,pointers,private,C++,Arrays,Class,Pointers,Private,我对这个问题的恼怒在很大程度上是由于在所有其他解决方案中大量使用矢量作为万灵药而加剧的 让我在这个问题之前说,我需要使用指针来解决这个问题,尽管它们可能很烦人。我可能不会使用vector,因为我们的课程材料中没有涉及它 我习惯于使用以下格式声明指向数组的指针 int* numbers; numbers= new int[10]; 答对了,我刚刚创建了一个包含十个元素的数组,可以存储整数。呜 现在,我正在尝试创建一个指针,指向一个对象数组,而不仅仅是任何对象 我有两节课。一个叫账户,另一个叫交易
int* numbers;
numbers= new int[10];
答对了,我刚刚创建了一个包含十个元素的数组,可以存储整数。呜
现在,我正在尝试创建一个指针,指向一个对象数组,而不仅仅是任何对象
我有两节课。一个叫账户,另一个叫交易。在我的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;
我不明白我做错了什么,但我收到了几条错误信息
C2143 syntax error: missing ';' before '*'
C2238 unexpected token(s) preceding ';'
C4430 missing type specifier - int assumed. Note: C++ does not support default-int
本节第一节:
` 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
#如果取消交易#
#定义事务
#包括“Account.h”
#包括
#包括
类事务
{
私人:
int-mTransType;
双倍mTransAmt;
公众:
静态常数int存款=1;
静态常数int-draw=0;
事务();
交易(int mTransType,双倍mTransAmt);
int GetTransType(){return mtTransType;};
double GetTransAmt(){return mtTransamt;};
friend std::ostream和操作员
我所需要知道的就是在不同类的私有成员中声明指向对象数组的指针的正确语法
老实说,我不知道是否存在这样的东西,“指向数组的指针”。这里:
事务
是一个指向单个事务的指针
。如果你想让它成为动态分配数组的第一个元素,那么这就是你的业务。你必须做所有的簿记:分配正确的大小,如果需要,重新分配,遵守规则,最后但并非最不重要的一点是确保你没有泄漏内存。所有这些都是一个问题噩梦,它很容易出错,除了折磨学生之外,手动操作没有任何实际用途(std::vector
或智能指针应用于动态数组)。这可能看起来像是吹毛求疵,但重要的是要认识到,事务
确实指向一个对象,如果您需要更多,您可以自己处理
transaction=new transaction[MAX_TRANS];
的问题在于不能在函数外的类声明中分配成员。可以使用构造函数分配数组。但是,如果始终分配固定大小的数组,则首先不需要动态分配:
class Account {
private:
static const int MAX_TRANS = 100;
Transaction transaction[MAX_TRANS];
// ... more ...
}
请不要在一个问题中放太多东西。为什么transaction=newtransaction[MAX_TRANS];
不在“完整代码”中?您有不同版本的代码吗?我们只需要看到一个transaction=newtransaction[MAX_TRANS]
不能出现在类的成员声明区域中。它需要在函数(提示:或构造函数)中。坦率地说,不清楚为什么它是动态的,因为它的大小是固定的,并且相当小。另外,static const int MAX_TRANS=100;
不会出现在“完整代码”中。大小是否总是固定不变的,或者此静态成员只是您试图以某种方式使其工作?如果不是,大小是多少?是否应将其传递给构造函数?呃,对不起,我误解了您的问题,错过了一个事实,帐户
和事务
是两个独立的类“事务=新事务[MAX_TRANS];无法出现在类的成员声明区域。“好吧。我的说明特别告诉我创建“一个指向事务数组的指针,用于跟踪为该帐户进行的所有事务”。我至少可以这样做吗?谢谢你的帮助。我将使用我的修复程序进行更新。说明很迟钝。不需要一步完成所有操作,它应该是:创建指针。将指针分配到其他位置。谢谢你的帮助。