有人可以让我知道我在做什么错吗?我正在我的主要对象,并试图将字符串变量传递给它的设置器。我不断收到相同的错误“没有可行的转换”
#define PatientType_hpp
#include "PersonType.hpp"
#include "DoctorType.hpp"
#include "dataType.hpp"
class PatientType : public PersonType
{
private:
DoctorType drName;
public:
DoctorType getDrName() const;
void setDrName(DoctorType);
};
#endif /* PatientType_hpp */
//setters and getters
DoctorType PatientType::getDrName() const {
return drName;
}
void PatientType::setDrName(DoctorType drName) {
this->drName = drName;
}
#ifndef DoctorType_hpp
#define DoctorType_hpp
#include "PersonType.hpp"
#include <stdio.h>
class DoctorType: public PersonType
{
private:
string drSpecialty;
public:
string getDrSpecialty()const;
void setDRSpecialty(string);
};
#endif /* DoctorType_hpp */
#include "DoctorType.hpp"
#include <iostream>
string DoctorType::getDrSpecialty()const
{
return drSpecialty;
}
void DoctorType::setDRSpecialty(string drSpecialty)
{
this->drSpecialty=drSpecialty;
int main(int argc, const char *argv[]) {
PatientType example;
string drName = "Mr.Scott";
example.setDrName(drName);
// ERROR No viable conversion from 'std::__1::string aka 'basic_string<char, char_traits<char>, allocator<char> >') to 'DoctorType'
}
我期望它可以编译,因为我正在将字符串传递给我认为可以接受字符串的Patient类型。
答案 0 :(得分:0)
问题出在这里:
void PatientType::setDrName(DoctorType drName)
在这里,您希望发送一个DoctorType
参数。但是,在致电时您使用:
example.setDrName(drName);
,其中drName
是string
,而不是DoctorType
参数。
解决方法很明显:修改原型以使其接受string
参数,或者在调用方法时为其赋予DoctorType
参数。
答案 1 :(得分:0)
问题是此功能:
void PatientType::setDrName(DoctorType drName) {
此处,此函数需要使用DoctorType类型的参数,但您正在传递std :: string。
example.setDrName(drName); // drName is std::string. So, Type mismatch
有很多解决方法:
选项1:将函数签名更改为void PatientType::setDrName(const std::string &drName) {
选项2:比较简单,但可以。在DoctorType
中定义一个参数化的构造函数,并接受std::string
作为参数。
赞:
DoctorType::DoctorType(const std::string &name): name(name) { }
我认为方案2适合您的情况。
正如@t.niese所正确建议的那样,您必须显式创建DoctorType对象,并将构造函数定义为显式。像这样:
explicit DoctorType::DoctorType(const std::string &name): name(name) { }
同时调用它:
example.setDrName(DoctorType(drName));