我正在处理此代码。尚未完成。问题是我不明白为什么无法在numAccount
中更新my simple_account.h
。如果我打印出numAccount
,它将一直打印出“ 1”。谁能告诉我为什么我不能在这里访问和更改私有值?
main.cc
#include <iostream>
#include "simple_account.h"
using namespace std;
int main() {
char job;
int i = 0;
while (true) {
cout << "Job?" << endl;
cin >> job;
if (job == 'Q')
break;
if (job == 'N') {
Admin* user = new Admin[10];
(user+i)->newAccount(i);
cout << "i: " << i << endl;
i++;
}
}
simple_account.h
#pragma once
#include <iostream>
class Account {
public:
int id;
int b = 0;
};
class Admin {
class Account {
int id;
int b = 0;
};
int numAccount = 0;
Account **acnt[10];
public:
void newAccount();
void deposit(Account id, int money);
void withdrawal(Account id, int money);
void transfer(Account id1, Account id2, int money);
void check(Account id);
};
simple_acount.cc
#include "simple_account.h"
void Admin::newAccount() {
numAccount += 1;
}
答案 0 :(得分:1)
按“ N”打开新帐户时会发生问题。
if (job == 'N') {
Admin* user = new Admin[10];
(user+i)->newAccount(i);
cout << "i: " << i << endl;
i++;
}
此代码创建十个新的Admin
对象,并使用默认构造函数初始化每个对象。每个管理员都有自己的numAccount
成员,该成员初始化为零,因为这是您在此处指定的默认值:int numAccount = 0;
创建十个Admin
对象之后,代码然后使用(user+i)
选择一个对象并调用newAccount(i)
。这不应该编译,因为newAccount()
方法没有参数。但是,如果可行,它将使一个Admin
的{{1}}成员从初始的0增加到1。
(这里还有一个问题,就是当numAccount
达到10时,您将尝试在i
对象数组之外的地方调用newAccount()
,因此您将看到一些未定义的行为。)
如何解决此问题。...取决于您要执行的操作。如建议的那样,您可以使Admin
成为numAccounts
类的static
成员。但是我认为您需要检查设计:Admin
是什么,应该有多少?