2015-03-02 72 views
0

所以我试图从用户获取输入,然后将我的类客户的对象命名为与来自用户的输入相同。当我这样做,我得到了错误使用变量声明对象的名称

"main.cpp: In function ‘void getinfo(String)’: main.cpp:34:13: error: declaration of ‘customer x’ shadows a parameter customer x(firstname, lastname, account, pinnum, balance, accthist);

我需要一种方法来自动定制类的名称,可以由指定变量,它可以被修改或由用户输入。

*****更新****** 我确实想要很简单。这是一个学校项目,目的是由两个或三个人进行,我现在正在独奏。以下是该作业的链接。我将其包括在内,以防有人可能有更好的方式使用我的代码,或者解决我正在解决的问题的更好方法。

assignemnt

void getinfo(string x){ 
//----------Variable Declarations-------------- 

    string firstname; 
    string lastname; 
    string account; 
    int pinnum; 
    double balance; 
    vector <int> accthist; 


//----------Get Last Name---------------------------- 
    cout<<"Please enter your last name\n"; 
    cin>>lastname; 
//----------Get First Name---------------------------- 
    cout<<"Please enter your first name\n"; 
    cin>>firstname; 
//----------Get Account Number---------------------------- 
    cout<<"Please enter your desired account number\n"; 
    cin>>account; 
//----------Get Pin Number---------------------------- 
    cout<<"Please enter your desired pin number\n"; 
    cin>>pinnum; 
//----------Get First Deposit of $1,000.00-------------- 
    cout<<"Please enter your desired balance\n"; 
    cin>>balance; 

//----------create customer---------------------------- 
    customer x(firstname, lastname, account, pinnum, balance, accthist); 
} 



int main(){ 
    int choice; 
    cout<<"\t\t Please enter the number corresponding to your selected action.\n\n"; 
    cout<<"1) Open a New Account (Minimum $1,000.00 Deposit)\t"<<"2) Close an Existing Account\n"; 
    cout<<"3) Make a Withdraw ($50.00 -$500.00)\t\t\t"<<"4) Make a Deposit\n"; 
    cout<<"5)Check Account Balance\t\t\t\t\t"<<"6) Bank Statistics Menu\n"; 
    cin>>choice; 

    if (choice == 1){ 
     string test; 
     cout<<"Please enter your first name"; 
     cin>>test; 
     getinfo(test); 

    } 
    /*if (choice == 2){ 

    } 
    if (choice == 3){ 

    } 
    if (choice == 4){ 

    } 
    if (choice == 5){ 

    } 
    if (choice == 6){ 

    } 
    */else cout<<"Oops!"; 
return 0; 
} 

HEADER FILE- functions.h

#include "std_lib_facilities_4.h" 

//--------------------------------------------------------------------- 
class customer{ 
    private: 
     string firstn; 
     string lastn; 
     string acct; 
     int pin; 
     double bal; 
     vector <int> lastten; 

    public: 
    customer(string t1,string t2,string t3, int t4, double t5, vector <int> t6); 
    void deposit(double n){}; 
    void withdraw (double n){}; 
    double get_bal(){}; 

}; 
//--------------------------------------------------------------------- 
class stats{ 
    double avg_bal();  //average balance 
    double total_deposits();  //sum of all account balances 
    int total_cust(); //total number of customers 
}; 
//--------------------------------------------------------------------- 
class bank{ 
    private: 
     vector <string> allcust; 

    public: 
     void display_cust_account(); 
     bool verify_cust(); 
     void create_new_acct(string temp); 
     void check_maintenance_fee(); 
     void read_cust_accounts_from_file(); 
     void save_cust_account_to_file(); 
     void make_backup_file(); 
     void print_stats(); 
}; 
+0

请填写完整代码。你有两个同名的变量吗? – amchacon 2015-03-02 21:10:11

+0

假设你能够弄清楚如何做到这一点(顺便说一句,你不能),你究竟如何计划在你的代码中引用这个动态变量名?你甚至想象这样的代码可能看起来像什么?它必须通过'x'变量完成。但是,如果你打算使用'x'变量,那么只需将'x'作为变量的静态名称,因为变量名在运行时不可见。 – 2015-03-02 21:14:54

+0

嗯,我想知道是否可以通过使用指针和引用来使用'new'函数来命名对象。如'customer * p = new customer(blah,blah);'或者类似的东西。我会把这个客户放到一个数据库中,我可以通过名字,姓氏和社交标记他们。 – claywd 2015-03-03 16:13:23

回答

1

"main.cpp: In function ‘void getinfo(String)’: main.cpp:34:13: error: declaration of ‘customer x’ shadows a parameter customer x(firstname, lastname, account, pinnum, balance, accthist);

无论你想达到这个代码

(我严重怀疑它使任何意义上固定之后简单的错误) ,这是非常明显的错误消息说:

customer x(firstname, lastname, account, pinnum, balance, accthist); 
     //^

从上面的行中的变量名x相同用于函数的参数

void getinfo(string x){ 
       //^

这就是阴影其实就是在这种背景下。


因此,要解决这个问题,你选择一个不同的名称为其中任意一个,像

customer y(firstname, lastname, account, pinnum, balance, accthist); 
     //^

void getinfo(string y){ 
       //^
+0

不过,这将是一个noop – 2015-03-02 21:18:31

+0

@DieterLücking引用自己:“无论你想用这个代码实现什么......”(我现在VTC的问题现在) – 2015-03-02 21:19:31

+0

我明白错误,我把它包括了彻底不是解释。 我需要的是一种在类中创建对象的方法......使用不同的名称和基于用户输入的名称。任何想法如何做到这一点,或者如果可能的话? – claywd 2015-03-03 16:09:50

0

我建议你将你的getInfo功能的方法里面你customer班。

class Customer 
{ 
    string firstname; 
    string lastname; 
    string account; 
    int pinnum; 
    double balance; 
    vector <int> accthist; 
    public: 
    void getInfo(void); 
}; 

void Customer::getInfo() 
{ 
//----------Get Last Name---------------------------- 
    cout<<"Please enter your last name\n"; 
    cin>>lastname; 
//----------Get First Name---------------------------- 
    cout<<"Please enter your first name\n"; 
    cin>>firstname; 
//----------Get Account Number---------------------------- 
    cout<<"Please enter your desired account number\n"; 
    cin>>account; 
//----------Get Pin Number---------------------------- 
    cout<<"Please enter your desired pin number\n"; 
    cin>>pinnum; 
//----------Get First Deposit of $1,000.00-------------- 
    cout<<"Please enter your desired balance\n"; 
    cin>>balance; 
} 

int main(void) 
{ 
    Customer person; 

    // Print prompt and get the customer information. 
    person.getInfo(); 

    //... 
    return EXIT_SUCCESS; 
} 
+0

我想这会帮助,但我的目标是动态地创建我的课程的对象,我开始认为这是不可能的。使用您的编辑代码,我希望创建人,因为用户的名字是人。 这有道理吗? – claywd 2015-03-03 16:09:22

+0

要动态创建对象,请使用'operator new'和一个智能或唯一的指针。程序的架构(组织)与其执行不同。 – 2015-03-03 16:43:59

+0

'客户* x =新客户(客户名称,帐户,品牌,平衡,accthist);' 那样? – claywd 2015-03-03 17:07:30