我現在正在處理一項任務,而且我已經將一個數據組的新成員添加到鏈接列表中。我已經搜索了很多東西,但是我一直無法找到解決問題的辦法。問題是我在全局聲明的6個變量(客戶和5個節點類型的變量)最初在Openbutton_Click中打開文件時被修改。但我無法稍後在addconf_Click中修改這些變量。通常情況下,我不會發布求助信息,但我的時間不多,無法弄清楚。我有很多麻煩格式化,請耐心等待。C++:不能修改全局變量
這裏是.cpp文件與myform.h去
#include "MyForm.h"
using namespace System;
using namespace System::Windows::Forms;
using namespace std;
int customers = 0;
node *current;
node *first;
node *last;
node *temp;
node *previous;
[STAThread]
void Main(array<String^>^ args) {
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
Project1::MyForm form;
Application::Run(%form);
}
這是所有在myform.h
#pragma once
#include <fstream>
#include <string>
#include <iostream>
#include <sstream>
#include <msclr\marshal_cppstd.h>
#include "header.h"
using namespace std;
struct node{
account customer;
node *next;
};
extern int customers;
extern node *current;
extern node *first;
extern node *last;
extern node *temp;
extern node *previous;
private: System::Void Openbutton_Click(System::Object^ sender, System::EventArgs^ e) {
ifstream fin;
openFileDialog1->ShowDialog();
String^ filenname = System::IO::Path::GetFileName(openFileDialog1->FileName);
std::string filename = msclr::interop::marshal_as<std::string>(filenname);
fin.open(filename);
if (fin){
this->label2->Text = "File Opened";
}
else
this->label2->Text = "Failed to Open File";
String^ menu;
String^ temp;
string input;
string name;
string numstr;
string pinstr;
string balstr;
int num;
int pin;
float bal;
first = new node;
getline(fin, input);
numstr = input.substr(0, 3);
stringstream convert3(numstr);
convert3 >> num;
name = input.substr(8, 16);
name.erase(name.find_last_not_of(" \n\r\t") + 1);
pinstr = input.substr(24, 4);
balstr = input.substr(30, 7);
stringstream convert(pinstr);
convert >> pin;
stringstream convert2(balstr);
convert2 >> bal;
first->customer.setNum(num);
first->customer.setName(name);
first->customer.setPin(pin);
first->customer.setBal(bal);
first->next = 0;
numstr.clear();
name.clear();
pinstr.clear();
balstr.clear();
current = first;
customers++;
while (fin){
customers++;
previous = current;
current->next = new node;
current = current->next;
getline(fin, input);
numstr = input.substr(0, 3);
name = input.substr(8, 16);
name.erase(name.find_last_not_of(" \n\r\t") + 1);
pinstr = input.substr(24, 4);
balstr = input.substr(30, 7);
stringstream convert3(numstr);
convert3 >> num;
stringstream convert(pinstr);
convert >> pin;
stringstream convert2(balstr);
convert2 >> bal;
current->customer.setNum(num);
current->customer.setName(name);
current->customer.setPin(pin);
current->customer.setBal(bal);
}
last = previous;
last->next = 0;
customers--;
cout << "All accounts loaded, system ready." << endl;
// Print and fill the textbox
current = first;
menu = "Account List:" + customers + "\r\n " + "Num | Account Holder | Pin | Balance\r\n";
for (int c = 0; c < customers; c++){
menu += current->customer.getNum();
menu += " | ";
temp = gcnew String(current->customer.getName().c_str());
menu += temp;
menu += " | ";
menu += current->customer.getPin();
menu += " | $";
menu += current->customer.getBal();
menu += "\r\n";
if (current->next != 0){
current = current->next;
}
else
c = customers;
}
textBox1->Text = gcnew String(menu);
launch->Visible = true;
addCust->Visible = true;
remCust->Visible = true;
refList->Visible = true;
}
private: System::Void addconf_Click(System::Object^ sender, System::EventArgs^ e) {
int num = -1;
string name = "";
int pin = -1;
float bal = -1;
bool match = false;
string numstr = msclr::interop::marshal_as<std::string>(addnumbox->Text);
num = stoi(numstr);
name = msclr::interop::marshal_as<std::string>(addnamebox->Text);
name.erase(name.find_last_not_of(" \n\r\t") + 1);
string pinstr = msclr::interop::marshal_as<std::string>(addpinbox->Text);
pin = atoi(pinstr.c_str());
string balstr = msclr::interop::marshal_as<std::string>(addbalbox->Text);
bal = stof(balstr);
if (num != -1 && pin != -1 && name != "" && bal != -1){
current = new node;
last->next = current;
current->customer.setNum(num);
current->customer.setName(name);
current->customer.setPin(pin);
current->customer.setBal(bal);
current->next = 0;
last = current;
customers = customers + 1;
num = -1;
pin = -1;
name = "";
bal = -1;
}
}
header.h在這裏
#include <string>
#include <iostream>
using namespace std;
class account{
private:
int accNum;
int accPin;
string accName;
float accBal;
public:
void setNum(int num);
void setPin(int pin);
void setName(string name);
void setBal(float bal);
void deposit(float money);
void withdraw(float money);
int getNum();
int getPin();
string getName();
float getBal();
};
void account::setNum(int num){
accNum = num;
}
void account::setPin(int pin){
accPin = pin;
}
void account::setName(string name){
accName = name;
}
void account::setBal(float bal){
accBal = bal;
}
int account::getNum(){
return accNum;
}
int account::getPin(){
return accPin;
}
string account::getName(){
return accName;
}
float account::getBal(){
return accBal;
}
void account::deposit(float money){
accBal = accBal + money;
}
void account::withdraw(float money){
accBal = accBal - money;
}
你是否檢查條件'(num!= -1 && pin!= -1 && name!=「」&& bal!= -1)'是否評估爲真?你有錯誤信息嗎?或者是什麼讓你覺得它不起作用? – user463035818
順便說一句,你不必發表評論的代碼和正確的格式將有助於閱讀很多。 – user463035818
我檢查過它,它確實評估爲真。我認爲某些事情被破壞的原因是因爲即使我給他們分配值,鏈接列表值也不會改變,並且我無法將新成員添加到鏈接列表。 –