【问题标题】:Char type conversion incompatible字符类型转换不兼容
【发布时间】:2020-05-28 23:46:21
【问题描述】:

基于构造函数的程序

    Error -Incompatible  Type conversion from char to char[100]

代码 -

    #include<iostream>
    using namespace std;
    class demo
    {
    public:
        char name[100];
//This is where char is declared
        int marks;

        demo()
        {
            marks = 0;
            name = "Pro"; 
//assigning value to the char
            cout<<"Working"<<endl;
        }

        void input()
        {
            cout<<"Enter Name and Marks"<<endl;
            cin>>name>>marks;
        }
        void output()
        {
            cout<<name<<"\t"<<marks<<endl;
        }
    };

我尝试将名称放在“名称”和“名称”中 我也尝试使用类型转换(char) 但它似乎没有工作

int main()
        {
            demo Obj1, Obj2;
    //creating objects
            Obj1.output();
            Obj2.input();
            Obj2.output();
            return 0;
        }

【问题讨论】:

  • 你为什么不用std::string?这样它就可以完美地工作了。
  • 我们没有被教过,但我会马上用谷歌搜索
  • 您需要了解char(单个字符)和char 数组(一组多个字符)之间的区别,因此它们在逻辑上不能相互分配。该语言根本不允许直接分配给数组 - 必须一个接一个地复制元素。
  • 所以我将其输入为 name = { "P","R"}; ?
  • 由于您使用的是 char 的原始数组,而不是使用 std::string,请在 C++ 标头 &lt;cstring&gt; 或 C 标头(C++ 支持向后兼容性,即使它已被弃用)&lt;string.h&gt;.

标签: c++ constructor char type-conversion


【解决方案1】:

数组没有复制赋值运算符。

所以构造函数中的这条语句

name = "Pro"; 

错了。

你必须写

#include <cstring>

//...

std::strcpy( name, "Pro" );

或者更简单的方法就是像这样重写构造函数

    demo() : name { "Pro" }, mark( 1 )
    {
        cout<<"Working"<<endl;
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    相关资源
    最近更新 更多