You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++代码报错:int转std::__cxx11::string请求失败,求问题排查

问题描述

我是编程新手,长期潜水首次发帖。正在为学校项目基于已有代码构建程序,但出现大量错误,尤其是string使用、strcpy调用和const构造函数相关问题。

报错信息:

error: conversion from 'int' to non-scalar type 'std::__cxx11::string {aka std::__cxx11::basic_string<char>}' requested

出错的代码

CPP文件

#include "taxi.h"
#include <iostream>
#include <stdint.h>
#include <string>
#include <cstring>
using namespace std;

Taxi::Taxi(){
    int interno = 0;
    string marca = 'Marca';
    string patente = 'AA 00 AA';
    string Propietario = 'Apellido, Nombre';
    int chofer = 0;
    fadia = 1;
    fames = 1;
    fanio = 1970;
    fbdia = 1;
    fbmes = 1;
    fbanio = 1970;
    double tel = 0;
}

Taxi::Taxi(int inter, string marc, string pat, string prop, int ch, int dia_a,
    int dia_b, int mes_a, int mes_b, int anio_a, int anio_b, double te){
        
    int interno = inter;
    string marca = marc;
    string patente = pat;
    string propietario = prop;
    int chofer = ch;
    fadia = dia_a;
    fames = mes_a;
    fanio = anio_a;
    fbdia = dia_b;
    fbmes = mes_b;
    fbanio = anio_b;
    double tel = te;
}

Taxi::~Taxi(){
    cout<<"Destructor Activado. Fin del Programa."<<endl;
}

void Taxi::setPropietario(string prop){
    strcpy(propietario, prop);
}

void Taxi::setChofer(int ch){
    int chofer = ch;
}

void Taxi::imprimir(){
    cout<<"Chofer en Servicio: "<<"\n   -"<<chofer<<"\n  -"<<propietario <<"\n  -"<<tel<<endl;
    cout<<"Vehiculo en Servicio: "<<"\n   -"<<marca<<"\n  -"<<patente<<endl;
    cout<<"Fecha de alta: "<<fadia<<"/"<<fames<<"/"<<fanio<<endl;
    cout<<"Fecha de baja: "<<fbdia<<"/"<<fbmes<<"/"<<fbanio<<endl;
}

头文件(taxi.h)

#ifndef TAXI_H
#define TAXI_H
#endif // TAXI_H
#include <iostream>
#include <stdint.h>
#include <string>
#include <cstring>
    
class Taxi{
    private:
        int interno;
        std::string marca;
        std::string patente;
        std::string propietario;
        int chofer;
        int fadia;
        int fames;
        int fanio;
        int fbdia;
        int fbmes;
        int fbanio;
        double tel;

    public:
        Taxi();
        Taxi(int inter, std::string marc, std::string pat, std::string prop, int ch, int dia_a,
            int dia_b, int mes_a, int mes_b, int anio_a, int anio_b, double te);
        Taxi(const Taxi &);
        ~Taxi();

        void setPropietario(std::string prop);
        void setChofer(int inter);
        void imprimir();
        void imprimirtaxi();
};

错误修复步骤

  • 字符串初始化错误:构造函数中用单引号'包裹字符串(如'Marca'),单引号仅适用于单个字符,多个字符会被编译器解析为整数,触发int转std::string的报错。改为双引号"Marca"即可。同时注意:构造函数中是给类成员变量赋值,不要重新声明局部变量(比如int interno = 0;要改成interno = 0;,否则成员变量不会被赋值)。

  • 构造函数局部变量遮蔽成员变量:两个构造函数都重新定义了与成员变量同名的局部变量(如int interno = inter;),导致成员变量未被正确初始化。去掉类型声明,直接给成员变量赋值:

    Taxi::Taxi(){
        interno = 0;
        marca = "Marca";
        patente = "AA 00 AA";
        propietario = "Apellido, Nombre";
        chofer = 0;
        fadia = 1;
        fames = 1;
        fanio = 1970;
        fbdia = 1;
        fbmes = 1;
        fbanio = 1970;
        tel = 0;
    }
    

    带参数的构造函数同理,修改后:

    Taxi::Taxi(int inter, string marc, string pat, string prop, int ch, int dia_a,
        int dia_b, int mes_a, int mes_b, int anio_a, int anio_b, double te){
            
        interno = inter;
        marca = marc;
        patente = pat;
        propietario = prop;
        chofer = ch;
        fadia = dia_a;
        fames = mes_a;
        fanio = anio_a;
        fbdia = dia_b;
        fbmes = mes_b;
        fbanio = anio_b;
        tel = te;
    }
    
  • strcpy使用错误:strcpy是C语言中用于复制C风格字符串(char*)的函数,不能直接用于std::string。std::string直接用赋值运算符=即可修改值,修改setPropietario函数:

    void Taxi::setPropietario(string prop){
        propietario = prop;
    }
    
  • setChofer函数错误:同样存在局部变量遮蔽成员变量的问题,改为直接赋值:

    void Taxi::setChofer(int ch){
        chofer = ch;
    }
    
  • 头文件预处理指令位置错误:#endif // TAXI_H放在了头文件开头,导致后续类定义和头文件包含被排除,编译时找不到Taxi类定义。将#endif移到文件末尾:

    #ifndef TAXI_H
    #define TAXI_H
    #include <iostream>
    #include <stdint.h>
    #include <string>
    #include <cstring>
        
    class Taxi{
        // ... 类定义 ...
    };
    #endif // TAXI_H
    
  • 未实现拷贝构造函数:头文件声明了Taxi(const Taxi &);但未实现,可添加实现(成员均为基本类型和std::string,默认拷贝逻辑足够),或删除该声明。实现示例:

    Taxi::Taxi(const Taxi &other){
        interno = other.interno;
        marca = other.marca;
        patente = other.patente;
        propietario = other.propietario;
        chofer = other.chofer;
        fadia = other.fadia;
        fames = other.fames;
        fanio = other.fanio;
        fbdia = other.fbdia;
        fbmes = other.fbmes;
        fbanio = other.fbanio;
        tel = other.tel;
    }
    

内容的提问来源于stack exchange,提问作者Facundo zanatta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 20:39:19