从const char*到int的转换无效
invalid conversion from const char* to int
我在c++中有四个文件
BankAccount.h
BankDatabase.h
Main.cpp
BankAccount.h
#include <string>
class BankAccount
{
public:
BankAccount(int accNumber,const std::string& accName);
void setAccNumber(const int accNumber);
int getAccNumber() const;
void setAccName(const std::string& clientName);
std::string getAccName() const ;
protected:
int mAccNumber;
std::string mAccName;
};
BankAccount::BankAccount(const int accNumber,
const std::string& accName):mAccNumber(accNumber),mAccName(accName){}
void BankAccount::setAccNumber(const int accNumber)
{
mAccNumber = accNumber;
}
void BankAccount::setAccName(const std::string& accName)
{
mAccName = accName;
}
int BankAccount::getAccNumber() const
{
return mAccNumber;
}
std::string BankAccount::getAccName() const {
return mAccName;
}
BankDatabase.h
#include <map>
#include <iostream>
#include <stdexcept>
#include "BankAccount.h"
class BankDatabase
{
public:
BankDatabase();
void addAccount(const BankAccount& acc);
void deleteAccount(int accNumber);
BankAccount& findAccount(int accNumber)
throw (std::out_of_range);
BankAccount& findAccount(std::string& accName)
throw (std::out_of_range);
void mergeDatabase(BankDatabase& db);
protected:
std::map<int,BankAccount> mAccounts;
};
BankDatabase::BankDatabase(){}
void BankDatabase::addAccount(const BankAccount& acc)
{
std::pair<std::map<int,BankAccount>::iterator,bool> res =
mAccounts.insert(std::make_pair(acc.getAccNumber(),acc));
if(!res.second)
std::cout << "Account cannot be added ";
}
void BankDatabase::deleteAccount(int accNumber)
{
if( mAccounts.count(accNumber))
mAccounts.erase(accNumber);
}
BankAccount& BankDatabase::findAccount(int accNumber)
throw(std::out_of_range)
{
auto iter = mAccounts.find(accNumber);
if(iter != mAccounts.end())
return iter->second;
throw std::out_of_range("No account number with this name ");
}
BankAccount& BankDatabase::findAccount(std::string& accName)
throw(std::out_of_range)
{
for(auto& p : mAccounts) {
if ( p.second.getAccName() == accName )
return p.second;
}
throw std::out_of_range(" No account with this name ");
}
Main.cpp
#include <iostream>
#include "BankDatabase.h"
int main()
{
BankDatabase db;
db.addAccount(BankAccount(1,"james"));
db.addAccount(BankAccount(2,"johnson"));
db.addAccount(BankAccount(3,"kamal"));
db.addAccount(BankAccount(4,"appu"));
// find account name based on account number
std::cout << db.findAccount(1).getAccName();
// find account number based on account name
std::cout << db.findAccount("james");
// delete an account
db.deleteAccount(db.findAccount("james").getAccNumber());
// find the account
std::cout << db.findAccount("james");
//Merge database
db.mergeDatabase(db);
return 0;
}
在语句std::cout << db.findAccount("james");
,我得到了一个错误:
错误:从'const char*'到'int'的转换无效
但我在BankDatabase.h
中定义了findAccount(int)
和findAccount(string)
有人能帮帮我吗?
代替
BankAccount& findAccount(std::string& accName)
使用BankAccount& findAccount(std::string const& accName)
当使用"james"
调用函数时,不能将其转换为std::string&
,但可以将其转换为临时std::string
,当参数类型为std::string const&
时,可以将其用作实参。
,
std::cout << db.findAccount(std::string("james"));
是一个问题,因为在std::ostream
和BankAccount
之间没有定义operator<<()
。
为findAccount定义了两个重载,一个接受int类型,另一个接受std::string引用。您试图调用它的参数不是std::string,而是c-string,即const char*。编译器现在有两个选项:
为了调用int版本,需要将const char*转换为int(这是您看到的错误)。
为了调用string版本,必须创建一个临时std::string。在此之后,必须形成对临时对象的非const引用(这是不允许的,并且您在问题中没有看到或没有显示错误)。
既然你似乎没有改变字符串,一个简单的解决这个问题的方法是接受const std::string&代替。您的代码还有其他一些问题
相关文章:
- 错误:从"int"到枚举c++的转换无效
- 从 'int' 到 'int*' CPP 的转换无效
- C++ PTHREADS - 无效转换无效*(*)()到无效*(*)(无效*)
- 为什么我收到"从常量指针到指针的转换无效?
- 错误:从"int"到"int*"的转换无效[-允许].我在下面提供了我的代码,我
- 从类指针到 int 的转换无效
- C++ 错误:由于 swprintf 而从 'int' 到 'const wchar_t* 的转换无效
- 错误:从'void*'到'const uint8_t* {aka const unsigned char*}'的转换无效 [-允许]
- QTextStream的操作数到二进制的转换无效
- 从类型"void*"到函数指针的强制转换无效
- 错误:从 'char' 到 'const char' [-允许] strcat(加密,密钥[i])的转换无效;
- C++ - 从 "int" 到 "unsigned char" 的缩小转换无效
- 返回对象时从'const DList<int>* const'到 'DList<int>*' [-fallowive] 的转换无效
- 错误:AES 加密密钥:从"char*"到"无符号字符"的转换无效
- 模板类实例化中的指针转换无效
- 从"int"到"矢量*"的转换无效
- 从类型"void*"到类member_function指针的强制转换无效
- 在 sprintf 中从 'signed char*' 到 'char*' 的转换无效
- 另一个:从"常量类型*"到"类型*"的转换无效
- constexpr 链表 - 从 const X* 到 X* 的转换无效