Вопрос говорит сам за себя, правда. Я не уверен, в чем проблема. Я довольно новичок в занятиях; мой практический опыт работы с ними близок к нулю, но я прочитал о них немало.
Я создал класс ECard со следующим конструктором
ECard::ECard( int bankNum, int PIN )
{
m_BankNum = new int;
m_PIN = new int;
m_Barred = new bool;
m_Amount = new double;
*m_BankNum = bankNum;
*m_PIN = PIN;
*m_Barred = false;
*m_Amount = 100.0;
}
и я инициализирую с EC card( 12345, 54321 )
У меня также есть функция-член display()
, которая просто выводит все переменные-члены BankNum, PIN, Barred и Amount.
Когда я вызываю эту функцию card.display () в моей основной функции, вывод получается именно так, как я ожидал.
Однако, когда он входит в мой цикл:
/* Fine values! */
card.display();
while( true )
{
/* Introductory screen giving user options to choose from */
mainScreen( card );
/* Make a choice... */
choice = readInput();
/* Garbage! */
card.display();
/* Pass it to the switch, watch out for invalid input! doChoice is a bool */
if( !doChoice( choice, card ) )
{
cout << "Bad input- repeat!" << endl;
}
/* TODO: Option to terminate loop. */
}
и я пытаюсь напечатать переменные в моей функции doChoice (), я получаю мусор. Все мои переменные испортили настройки. Мой Banknumber - это что-то, PIN-код - это действительно большое отрицательное число (не МИН), для Barred внезапно устанавливается значение true, и на моем счете 0 денег, даже если Barred и Amount никогда не устанавливались мной явно за пределами конструктора.
/* Outsourced switch that handles the user input from MAIN */
bool doChoice( int choice, ECard card )
{
int inputPIN;
int inputAmount;
/* Garbage! */
card.display();
switch( choice )
{
case 1:
/* Case 1: Charge card with money. Needs PIN and amount */
cout << "PIN Eingeben: ";
inputPIN = readInput();
cout << "\nBetrag Eingeben: ";
inputAmount = readInput();
karte.aufladen( inputAmount, inputPIN );
return true;
Извините, если некоторые функции-члены и выходы все еще на немецком языке. В любом случае это не должно быть важно (мне все равно нравится писать все домашние задания на английском, поскольку я, вероятно, буду программировать для международных компаний, но мой учитель очень разборчив и понижает мою оценку, если я программирую вне его ожиданий)
Переменные уже перепутаны еще до того, как они попадут в коммутатор, так что часть должна быть просто риторикой. Я вижу проблему только с передачей объекта карты, хотя я не знаю, почему это будет проблемой. Я не знаю, как это исправить, я просто отправляю каждого участника вместо этого? Создать указатель на объект и отправить это? Я имею в виду, что раньше я передавал объект карты, а другая функция не давала мне мусора. Только этот.
И последнее замечание: если внезапно возникает ошибка в синтаксисе, то это потому, что я быстро перевел все свои функции и элементы на английский, и я мог где-то пропустить заглавную букву или еще что-то. Пожалуйста, не обращайте на них внимания, синтаксис правильный и программа запускается, она просто отображает значения мусора.