无法将字符串转换为 int 作为回报。在 int 返回函数 getsocial() 中没有声明任何字符串变量


#include<iostream>
#include<string>
using namespace std;
/*this program takes a bank customer's info with the use of a class*/
//class definition
class BankCustomer
{
public:
    BankCustomer();     //constructor for BankCustomer class
    void fullname(string, string);
    string firstname();
    string lastname();
    bool setsocial(int s); //accept a arg. of int type
    int getsocial();
private:
    string fname, lname, SSNlength; //can't be changed by client; sensitive info should be made private
};
//class implementation
BankCustomer::BankCustomer(){}
void BankCustomer::fullname(string f, string l)
{
fname=f;
lname=l;
}
string BankCustomer::firstname()
{
return fname;
}
string BankCustomer::lastname()
{
return lname;
}
bool BankCustomer::setsocial(int s)//function verifies that entered SSN is 9 digits long by counting # of digits of entered SSN
{
int count, SSNlength;
while(s != 0)
{
s /=10;
++count;
if(count == 9)
{
cout <<"nValid SSN Entered!" << endl;
SSNlength=s;
return true;
}
}
}
int BankCustomer::getsocial()
{
return SSNlength;
}
//client program
int main()
{
BankCustomer customer;          //customer declared as object of BankCust class
string firstname, lastname;
int ssn, s;
//data assignment
cout <<"n Enter First Namen" << endl;
cin >> firstname;
cout<<"n Enter Last Namen"<< endl;
cin >> lastname;
customer.fullname(firstname,lastname);
do
{
cout<<"nEnter 9-Digit SSN"<< endl;
cin >> ssn;
customer.setsocial(ssn);
}
while(!customer.setsocial(ssn)); //function will repeat as long as entered user ssn forces setsocial() to evaluate it as false
//data ouput
cout <<"nFirst Name:  "<<customer.firstname()<<"n"<< endl;
cout <<"nLast Name:  "<<customer.lastname()<<"n"<< endl;
cout <<"n SSN is:  "<<customer.getsocial()<<"n" << endl;
}

错误针对的是BankCustomer::getsocial()。变量ssn - length被声明为int类型,getsocial()的返回类型为int。在我的代码中,我没有看到任何地方我打算将SSNlength转换为字符串。它是我如何传递和处理数据与setsocial()函数?

这是错误的:

int BankCustomer::getsocial()
{
return SSNlength;
}

,因为SSNlength是string类型的BankCustomer类的成员变量,即使没有在方法中声明,也可以从BankCustomer::getsocial中看到。这就是c++的工作原理。

所以编译器抱怨它不能将字符串转换为int(你想要返回的类型)。

这是你声明它的地方:

private:
    string fname, lname, SSNlength; //can't be changed by client; sensitive info should be made private

给定变量的名称,我怀疑您想写:

private:
    string fname, lname;
    int SSNlength; //can't be changed by client; sensitive info should be made private

要小心,在另一个方法中有一个auto变量以同样的方式调用。

我建议为成员制定一个命名规则来避免这一切。示例:在所有成员前加上m_:

private:
    string m_fname, m_lname
    int m_SSNlength; //can't be changed by client; sensitive info should be made private

最新更新