Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++:无法修改全局变量_C++_User Interface_Global Variables - Fatal编程技术网

C++:无法修改全局变量

C++:无法修改全局变量,c++,user-interface,global-variables,C++,User Interface,Global Variables,我现在正在做一项作业,在向链表中添加数据组的新成员时遇到了一些麻烦。我已经在谷歌上搜索了所有地方,但还没有找到解决问题的办法。问题是,我在Openbutton_Click中打开文件时,首先修改了我声明的6个全局客户变量和5个节点类型变量。但是我无法在以后的addconf\u Click中修改变量。通常我不会发布帮助,但我的时间不多了,无法解决这个问题。我在格式化这个文件时遇到了很多麻烦,所以请容忍我 下面是myform.h附带的.cpp文件 #include "MyForm.h" using

我现在正在做一项作业,在向链表中添加数据组的新成员时遇到了一些麻烦。我已经在谷歌上搜索了所有地方,但还没有找到解决问题的办法。问题是,我在Openbutton_Click中打开文件时,首先修改了我声明的6个全局客户变量和5个节点类型变量。但是我无法在以后的addconf\u Click中修改变量。通常我不会发布帮助,但我的时间不多了,无法解决这个问题。我在格式化这个文件时遇到了很多麻烦,所以请容忍我

下面是myform.h附带的.cpp文件

#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); 
}
这都是我的表格

#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;


    }


}
头,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;
}
在头文件中将客户声明为int。请记住,头文件已粘贴到其包含的文件中。因此,您将拥有该变量的许多实例

正确的方法是在cpp文件中定义它,并通过在头文件中使用extern int customers使它成为全局的

同样的问题也适用于节点变量。您必须在cpp文件中定义它们,以便它们只存在于一个位置


然而,使用这样的全局可变变量几乎从来都不是一个好主意。

结果表明,我缺少一行代码,无法正确打印列表的当前状态。现在感觉自己像个十足的白痴。多亏了大家的帮助。

您是否检查了条件num!=-1和pin!=-1&&name!=&&巴尔!=-1曾经评估为真吗?你收到错误信息了吗?或者发生了什么事情让你认为它不起作用?顺便说一句,你不必发布注释代码,正确的格式将有助于阅读大量内容。我已经检查了它,它的计算结果是真的。我认为有些东西被破坏是因为链表值从不改变,即使我给它们赋值,我也不能向链表中添加新成员。这不是C++作为异或运算,^,需要两个参数,所以String无效。此外,在不允许类标识符(例如公共类)之前,不允许使用访问修饰符。因此,我在.h中创建了外部变量,并在.cpp中定义了它们,但问题仍然存在。