2014-10-10 5 views
-3

У меня есть класс BankAccount, и один из его частных членов - клиенты BankAccount * [10]. Я хочу поместить объекты типа BankAccount (string s, int a, double c, double r, double s) внутри массива и затем получить доступ к каждой отдельной части данных, такой как строка s с getString() или int a с getAccountNum (). Пробовал много вещей, но я получаю пустой черный ящик. Как я могу просто поместить объекты в массив частных классов?Доступ к элементам класса класса из класса частного класса C++

#include "BankAccount.h" 

BankAccount::BankAccount() : customers() 
{ 

} 

void BankAccount::work() 
{ 
string n = "name"; 
string* nn = &n; 
BankAccount* b = new BankAccount(nn); 



customers[0] = b; 
go(); 
} 

BankAccount::BankAccount(string* n) 
{ 

name = n; 
} 
string BankAccount::getName() 
{ 
return *name; 
} 

void BankAccount::go() 
{ 

string st = customers[0]->getName(); 
cout << st << endl; 
} 
+3

У вашего кода есть намного больше проблем, чем это, и я думаю, что я боюсь увидеть остальных. :) – 0x499602D2

+3

'BankAccount * b = новый BankAccount(); b = новый BankAccount (n); BankAccount a [1]; a [0] = * b: 'О, мой. –

+1

Вам действительно нужно снова прочитать главу о классах в своей книге на C++. У тебя еще нет. –

ответ

0

Первый. Создайте свой элемент переменной массива банковского счета. Второй. Если вы не знаете, как использовать указатели, не используйте его. Вы все равно можете поместить «BankAccount» в массив, даже если он не является типом указателя, вы все равно получите те же результаты.

BankAccount::BankAccount() : customers() 
{ 

} 

void BankAccount::work() 
{ 
string n = "name"; 

BankAccount* b = new BankAccount(); //do thus 
b = new BankAccount(n); //dont do this('b' above will create memory leak 
BankAccount a[1]; //no need to do this 
a[0] = *b; // and this 
customers[0] = a; // assign 'b' instead of 'a' 

// клиенты - ваш переменный элемент вашего члена BankAccount? Просто добавьте метод установки «name» или используйте его «клиенты [0] .name = n;» вы все еще будете иметь возможность установить его «имя» член переменной }

BankAccount::BankAccount(string n) 
{ 
    BankAccount nn; //don't do this 
nn.name = n; // also this 
// if you want to set the value of your member variable 'name', just equate it 'name = n;' you dont need to create new instance of 'BankAccount'. 
} 
string BankAccount::getName() 
{ 
    return name; //this is your only correct item 
} 

void BankAccount::go() 
{ 
BankAccount b ; // dobt do this 
string st = b.customers[0]->getName(); // almost correct. If you want to get name of 'customer[0]' just use this 'string st = customers[0]->getName();' or you can easily do print out 'cout << customers[0]->name << endl;' 
cout << st << endl; 
} 

Я думаю, что ваш получать здесь не так, является использование экземпляра «BankAccount» и указателей. Если вы хотите получить доступ к переменным-членам, вам не нужен новый экземпляр (вывод будет другим, если вы получите значение из нового экземпляра).

Попробуйте прочитать основы C++ для получения более подробной информации.

Я пользуюсь своим телефоном сейчас, поэтому простите меня, если я не могу объяснить лучше. Я надеюсь, что это помогает. и я надеюсь, что вы получите код для правильной работы. Он по-прежнему нуждается в большой работе.

+0

Это действительно не помогло, так как массив должен быть указателем. Нет другого способа объявить его как частный член класса, если объект не является указателем. Мне нужно знать, как сделать объект массива заполнен элементами его объекта класса. –

+0

Hahaha! Если вам нужно использовать указатели, попробуйте научиться их использовать. В любом случае. Просто измените тип данных переменной-члена на указатель и используйте его как указатель. Измените доступ переменных-членов к '->' вместо '.' –

+0

Я заработал. Поэтому спасибо, ЧТОБЫ ОЧЕРЕДИТЬ меня в правильном направлении;) Я проголосую за вас, но у меня нет репутации 15 или более. Сожалею. Интересно, почему мой представитель настолько низок? –

Смежные вопросы