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

Can't convert string to int in return. No string variable declared whatsoever in int returning function 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 Name\n" << endl;
cin >> firstname;

cout<<"\n Enter Last Name\n"<< 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()。变量 SSNlength 声明为 int 类型,getsocial() 具有 return 类型的 int。我在我的代码中没有看到我打算将 SSNlength 转换为字符串的任何地方。这就是我使用 setsocial() 函数传递和处理数据的方式吗?

错了:

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

因为 SSNlength 是类型 string class BankCustomer 的成员变量,从 BankCustomer::getsocial 可见,即使未在方法中声明。这就是 C++ 的工作原理。

因此编译器抱怨它无法将字符串转换为 int(您想要的 return)。

这是你声明它的地方:

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

小心,在另一个方法中有一个自动变量以相同的方式调用。

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

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