c++ - 在 C++ 中声明一个对象并使用 char* 进行初始化

标签 c++ class object char

我是一名 C++ 初学者,我在编译以下代码时遇到了问题 问题出在声明中 T a = s其中 schar*包含 abcde .

这里的目标是声明一个 T 的对象并用 s 初始化它.

我这行也有问题for(int i = 0; i < a(); i++) .

我不知道如何使用名为 a() 的构造函数或函数返回尺寸。

这是我的代码:

#include <iostream>
#include <cassert>
using namespace std;
class T{
    int nb ;
    char *pc;
public:
    T(int);
    ~T();
    T(T&);
    char& operator[](int);

    T(const char* s){
        int n ;
        for(int i = 0 ; s[i] != '\0' ;i++ ) n++ ;
        nb = n ;
        pc= new char[nb];
        for(int i=0 ; i < nb ; i++) pc[i] = s[i];
    }


};


    T::T(int k){
        assert(k > 0);
        nb = k;
        pc = new char[nb];
    }
    T ::~T(){
        if( pc != NULL) delete [] pc;
    }
    T::T(T& t){
        nb=t.nb;
        delete[] pc;
        pc = new char[nb];
        for(int i=0 ; i < nb ; i++) pc[i] = t.pc[i];
    }
    char& T::operator[](int index){
        assert(index >=0 && index <= nb);
        return pc[index];
    }



int main(){
    char* s = "abcde";
    T a = s;
    for(int i = 0; i < a(); i++)
        cout << a[i] << " ";
    cout << endl;
    T b = a;
    b[1] = '*';
    b[3] = '*';
    for(int i = 0; i < b(); i++)
    cout << b[i] << " ";
    cout << endl;
    return 0;
}

我收到以下错误:

从类型“T”的右值初始化类型“T&”的非常量引用无效|

最佳答案

您在定义对象时误解了“赋值”。

当像你一样定义一个对象时

T a = s;

这不是一个赋值,它是一个对象构造,你需要一个带有const char*参数的构造函数。

如果你这样做

T a;
a = s;

然后这是一个作业。当然,这依赖于 T 具有默认构造函数(不接受任何参数的构造函数)。


你现在得到的错误是因为你需要一个复制构造函数,它通过常量 引用获取它的参数。定义

T a = s;

实际上等于

T a = T(s);

T(s) 创建一个临时对象,一旦 a 的完全初始化完成,该对象就会被销毁。并且非常量引用不能绑定(bind)到临时对象,因此您的复制构造函数需要接受一个 const T& 参数。

关于c++ - 在 C++ 中声明一个对象并使用 char* 进行初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48597074/

相关文章:

c++ - OpenCV 中文档的模式提取层

C++ "unresolved external symbol"用于 main 之外的函数

Java:使用符合我的接口(interface)的外部类

c++ - 从文本文件/XML 文件创建 C++ 类

javascript - 对数组中对象数据的更改/编辑列表进行排序

c++ - boost::shared_mutex 在 Linux 上比粗略的 std::mutex 慢

c++ - QWizard::setField:无法写入属性

java - getResourceAsStream 方法之间的区别

arrays - Twig - 为什么它不允许我们设置对象/数组值?

javascript - 如何基于字符串对对象进行操作