首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

创建类数组时,->的基操作数有非指针类型错误

是指在使用箭头操作符->访问类数组元素时,基操作数的类型不是指针类型,导致编译错误。

类数组是指使用数组语法来访问类对象的成员,而不是通过对象名来访问。箭头操作符->用于访问指针所指向对象的成员。

在创建类数组时,需要确保基操作数是指向类对象的指针。如果基操作数的类型不是指针类型,就会出现非指针类型错误。

解决这个错误的方法是确保基操作数是指向类对象的指针。可以通过以下步骤来创建类数组:

  1. 创建一个指向类对象的指针。
  2. 使用指针访问类对象的成员,可以使用箭头操作符->。

以下是一个示例代码:

代码语言:txt
复制
#include <iostream>

class MyClass {
public:
    int value;
};

int main() {
    MyClass* myArray = new MyClass[5]; // 创建指向类对象的指针数组

    for (int i = 0; i < 5; i++) {
        myArray[i].value = i; // 使用箭头操作符->访问类对象的成员
    }

    for (int i = 0; i < 5; i++) {
        std::cout << myArray[i].value << " "; // 输出类对象的成员值
    }

    delete[] myArray; // 释放内存

    return 0;
}

在上述示例中,我们创建了一个指向MyClass类对象的指针数组myArray,并使用箭头操作符->访问类对象的成员value。最后输出了类对象的成员值。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云云数据库 MySQL 版:https://cloud.tencent.com/product/cdb_mysql
  • 腾讯云对象存储(COS):https://cloud.tencent.com/product/cos
  • 腾讯云人工智能:https://cloud.tencent.com/product/ai
  • 腾讯云物联网平台:https://cloud.tencent.com/product/iotexplorer
  • 腾讯云移动开发:https://cloud.tencent.com/product/mobile
  • 腾讯云区块链服务:https://cloud.tencent.com/product/tbaas
  • 腾讯云元宇宙:https://cloud.tencent.com/product/tencent-metaverse
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

读完某C++神作,我只记下了100句话

设计良好程序只有在强调速度才在实现内部使用数组指针数组下标的正确类型是size_t。 预处理器变量NULL在编译时会被数值0替换。指针做减法操作得到是ptrdiff_t类型。...包含signed和unsigned int表达式会被转换成unsigned,如果为负数会有问题。 数组名用做sizeof或取地址&操作数不被当做指针。...引用形参将复制实参值,引用return将复制return东西。即使定义了其他构造函数,也会合成复制构造函数【能够复制数组】。成员指针一般需要显示定义复制构造函数。...派生指针静态类型和动态类型不一致指针指向派生】,为保证删除指针调用合适析构函数【多态】,析构必须为virtual。...纯虚函数==抽象==无法创建对象 派生对象复制到派生对象将被切掉【而指针和引用不会】。

1.4K20

C++面试知识总结

操作数具有类型char、unsigned char或signed char,其结果等于1。 当操作数指针,sizeof依赖于系统位数。 当操作数具有数组类型,其结果是数组总字节数。...联合类型操作数sizeof是其最大字节成员字节数。 结构类型操作数sizeof是这种类型对象总字节数。 如果操作数是函数中数组形参或函数类型形参,sizeof给出其指针大小。...函数virtual,是覆盖,没有virtual就是隐藏。...,派生成员函数可以访问公有和受保护成员;公有继承受保护成员,可以通过派生对象访问但不能修改。...私有继承成员只能被直接派生成员访问,无法再往下继承。 受保护继承成员也只被直接派生成员访问,无法再往下继承。

1.7K41

C++查缺补漏

在某些情况下,我们没有必要复制对象——只需要移动它们 可被利用临时对象,触发移动构造 //函数返回含有指针成员对象 //将要返回局部对象转移到主调函数,省去了构造和删除临时对象过程 #include...为最远派生提供唯一成员,而不重复产生多次复制 注意: 在第一级继承就要将共同设计为虚及其派生构造函数 建立对象所指定称为最远派生成员是由最远派生构造函数通过调用虚构造函数进行初始化...virtual 关键字 派生可以不显式地用virtual声明虚函数,这时系统就会用以下规则来判断派生一个函数成员是不是虚函数: 该函数是否与虚函数相同名称、参数个数及对应参数类型 该函数是否与虚函数相同返回值或者满足类型兼容规则指针...(virtual table) 虚表中有当前各个虚函数入口地址 每个对象一个指向当前虚表指针(虚指针vptr) 动态绑定实现 构造函数中为对象指针赋值 通过多态类型指针或引用调用成员函数...- 在虚函数显式重载中运用,编译器会检查是否存在一虚拟函数,与派生中带有声明override虚拟函数,相同函数签名(signature);若不存在,则会回报错误 多态行为基础:声明虚函数

2.5K10

一文让你学完C++,干货收藏!!!

指针可以在任何时候指向到另一个对象。 引用必须在创建被初始化。指针可以在任何时间被初始化。...当创建一个,您不需要重新编写新数据成员和成员函数,只需指定新建继承了一个已有的成员即可。这个已有的称为,新建称为派生。 继承代表了 is a 关系。...当使用不同类型继承,遵循以下几个规则: 公有继承(public):当一个派生自公有公有成员也是派生公有成员,保护成员也是派生保护成员,私有成员不能直接被派生访问...私有继承(private):当一个派生自私有公有和保护成员将成为派生私有成员。 多继承 多继承即一个子类可以多个父,它继承了多个父特性。...数据抽象好处 数据抽象两个重要优势: 内部受到保护,不会因无意用户级错误导致对象状态受损。

3.3K20

2W五千字C++基础知识整理汇总

指针可以在任何时候指向到另一个对象。 引用必须在创建被初始化。指针可以在任何时间被初始化。...当创建一个,您不需要重新编写新数据成员和成员函数,只需指定新建继承了一个已有的成员即可。这个已有的称为,新建称为派生。 继承代表了 is a 关系。...当使用不同类型继承,遵循以下几个规则: 公有继承(public):当一个派生自公有公有成员也是派生公有成员,保护成员也是派生保护成员,私有成员不能直接被派生访问...私有继承(private):当一个派生自私有公有和保护成员将成为派生私有成员。 多继承 多继承即一个子类可以多个父,它继承了多个父特性。...数据抽象好处 数据抽象两个重要优势: 内部受到保护,不会因无意用户级错误导致对象状态受损。

2.6K10

一文让你学完C++,干货收藏!!!

指针可以在任何时候指向到另一个对象。 引用必须在创建被初始化。指针可以在任何时间被初始化。...当创建一个,您不需要重新编写新数据成员和成员函数,只需指定新建继承了一个已有的成员即可。这个已有的称为,新建称为派生。 继承代表了 is a 关系。...当使用不同类型继承,遵循以下几个规则: 公有继承(public):当一个派生自公有公有成员也是派生公有成员,保护成员也是派生保护成员,私有成员不能直接被派生访问...私有继承(private):当一个派生自私有公有和保护成员将成为派生私有成员。 多继承 多继承即一个子类可以多个父,它继承了多个父特性。...数据抽象好处 数据抽象两个重要优势: 内部受到保护,不会因无意用户级错误导致对象状态受损。

2.9K3029

一文让你学完C++,干货收藏!!!

指针可以在任何时候指向到另一个对象。 引用必须在创建被初始化。指针可以在任何时间被初始化。...当创建一个,您不需要重新编写新数据成员和成员函数,只需指定新建继承了一个已有的成员即可。这个已有的称为,新建称为派生。 继承代表了 is a 关系。...当使用不同类型继承,遵循以下几个规则: 公有继承(public):当一个派生自公有公有成员也是派生公有成员,保护成员也是派生保护成员,私有成员不能直接被派生访问...私有继承(private):当一个派生自私有公有和保护成员将成为派生私有成员。 多继承 多继承即一个子类可以多个父,它继承了多个父特性。...数据抽象好处 数据抽象两个重要优势: 内部受到保护,不会因无意用户级错误导致对象状态受损。

2.3K20

《逆袭进大厂》之C++篇49问49答

&a是数组指针,其类型为int (*)[10](就是前面提到数组指针),其加1,系统会认为是数组首地址加上整个数组偏移(10个int型变量),值为数组a尾元素后一个元素地址。...,重写就是重写函数体,要求函数必须是虚函数且: 与虚函数相同参数个数 与虚函数相同参数类型虚函数相同返回值类型 举个例子: //父 class A{ public...上图中展示了虚表和虚表指针对象和派生对象中模型,下面阐述实现多态过程: (1)编译器在发现中有虚函数,会自动为每个含有虚函数生成一份虚表,该表是一个一维数组,虚表里保存了虚函数入口地址...在构造,根据对象类型去初始化虚指针vptr,从而让vptr指向正确虚表,从而在调用虚函数,能找到正确函数 (3)所谓合适时机,在派生定义对象,程序运行会自动调用构造函数,在构造函数中创建虚表并对虚表初始化...,派生虚表指针指向虚表;当派生虚函数重写,派生虚表指针指向是自身虚表;当派生中有自己虚函数,在自己虚表中将此虚函数地址添加在后面 这样指向派生指针在运行时

1.9K10

《逆袭进大厂》之C++篇49问49答(绝对干货)

&a是数组指针,其类型为int (*)[10](就是前面提到数组指针),其加1,系统会认为是数组首地址加上整个数组偏移(10个int型变量),值为数组a尾元素后一个元素地址。...,重写就是重写函数体,要求函数必须是虚函数且: 与虚函数相同参数个数 与虚函数相同参数类型虚函数相同返回值类型 举个例子: //父 class A{ public...上图中展示了虚表和虚表指针对象和派生对象中模型,下面阐述实现多态过程: (1)编译器在发现中有虚函数,会自动为每个含有虚函数生成一份虚表,该表是一个一维数组,虚表里保存了虚函数入口地址...在构造,根据对象类型去初始化虚指针vptr,从而让vptr指向正确虚表,从而在调用虚函数,能找到正确函数 (3)所谓合适时机,在派生定义对象,程序运行会自动调用构造函数,在构造函数中创建虚表并对虚表初始化...,派生虚表指针指向虚表;当派生虚函数重写,派生虚表指针指向是自身虚表;当派生中有自己虚函数,在自己虚表中将此虚函数地址添加在后面 这样指向派生指针在运行时

2.5K40

C++中类型转换

,每次使用强制类型转换前,程序员应该仔细考虑是否还有其他不同方法达到同一目的,如果强制类型转换不可,则应限制强制转换值作用域,以减少发生错误机会。...static_cast,命名上理解是静态类型转换 使用场景: 用于层次结构中和派生之间指针或引用转换 注意: 上行转换(派生—->)是安全;下行转换(—->派生)由于没有动态类型检查...进行标明和替换 dynamic_cast,命名上理解是动态类型转换 使用场景: 只有在派生之间转换才使用dynamic_cast,type-id必须是指针引用或者void 使用特点:...必须要有虚函数 对于下行转换,dynamic_cast是安全(当类型不一致,转换过来是空指针),而static_cast是不安全(当类型不一致,转换过来错误意义指针,可能造成踩内存...使用场景: 不到万不得已,不用使用这个转换符,高危操作 使用特点: reinterpret_cast可以将整型转换为指针,也可以把指针转换为数组 reinterpret_cast可以在指针和引用里进行肆无忌惮转换

1.9K20

【TypeScript 演化史 — 第八章】字面量类型扩展 和 无类型导入

扩展字面量类型 可以通过显式地将变量标注为字面量类型创建扩展字面量类型变量 const stringLiteral: "https" = "https"; // 类型 "https" (扩展)...隐式any错误只会在编译器无法知道一个没有类型注解变量类型才会报告。...} } 更好地检查表达式操作数 null/undefined 在TypeScript 2.2中,空检查得到了进一步改进。TypeScript 现在将带有可空操作数表达式标记为编译错误。...具体来说,下面这些会被标记为错误: 如果+运算符任何一个操作数是可空,并且两个操作数都不是any或string类型。...编译器可以类型检查所有的使用,并在自动完成列表中建议可用成员: image.png 与继承进行对比,个区别:一个只能有一个

4.5K10

万字长文【C++】高质量编程指南

(1)不能再声明中初始化 const数据成员,因为对象未被创建,编译器不知道 SIZE值是多少。...(2)free或delete释放了内存之后,没有将指针设置为NULL,导致产生了 野指针 8.2.3.指针数组对比 数组要么在静态存储区被创建,如全局数组,要么在栈上被创建。...*),而不是p所指内存容量 //当数组作为函数参数进行传递,该数组自动退化为同类型指针 void Func(char a[100]) { sizeof(a);//4 而不是100 } 8.2.4...,成为野指针原因: 1,指针变量没有被初始化 指针变量在创建同时应当被初始化,要么将指针设置为 NULL,要么让它指向合法内存。...1,如果派生函数与函数同名,但是参数不同,此时,不论没virtual,函数将被隐藏:区别重载 2,如果派生函数与函数同名,并且参数也显然,但是没有virtual关键字,此时

1.4K20

CC++面试题之语言基础篇(一)

c三大特点是: 封装:封装是将数据和操作数方法封装在一个单元()内部,然后通过公共接口暴露有限访问权限。...需要手动将其转换为适当类型 new 会调用构造函数来初始化对象(如果是自定义对象),而 malloc 不会执行构造函数。 void * void * 是通用指针类型,被称为"无类型指针"。...使用 void * 指针需要谨慎,必须进行类型转换 示例(int 型转换): int * intPtr=static_case(ptr); 因为不提供类型检查,可能导致运行时类型错误。...简述C++从代码到可执行二进制文件.exe过程 四个过程,预编译、编译、汇编、链接 C++函数只声明,不定义会在哪步报错 实际错误通常发生在链接阶段,当链接器尝试将所有编译单元(源文件)组合在一起...深拷贝∶创建一个新对象和数组,将原对象各项属性"值”(数组所有元素)拷贝过来,是“值",深拷贝会在堆内存Q中另外申请空间来储存数据,从而解决了指针悬挂问题。

19210

《逆袭进大厂》第三弹之C++提高篇79问79答

所有其他静态数据成员都不会被初始化。 110、抽象为什么不能创建对象? 抽象是一种特殊,它是为了抽象和设计目的为建立,它处于继承层次结构较上层。...2) 向下类型转换 将指针或引用转换为派生指针或引用被称为向下类型转换,向下类型转换不会自动进行,因为一个对应几个派生,所以向下类型转换不知道对应哪个派生,所以在向下类型转换必须加动态类型识别技术...当在静态成员函数访问静态成员,编译器会自动将对象地址传给作为隐含参数传递给函数,这个隐含参数就是this指针。...把你知道都说一说 1) 构造函数,构造函数初始化对象,派生必须知道函数干了什么,才能进行构造;当虚函数,每一个一个虚表,每一个对象一个虚表指针,虚表指针在构造函数中初始化; 2)...虚函数是为了实现动态编联产生,目的是通过类型指针指向不同对象,自动调用相应、和类同名函数(使用同一种调用形式,既能调用派生又能调用同名函数)。

2.2K30

JAVA和C++对比学习

异常可以是任何类型数据,不强制处理 应该使用异常代替错误码返回值,而且应该通过宏功能让异常加入更多源代码信息,程序员应该强制自己处理所有的异常。...C++变量类型长度不固定,带符号和不带符号区别 为了在32和64位机上通用,通常需要定义uint32_t之类类型来统一长度 JAVA变量长度固定,全部都是带符号 3.3 复合变量类型 C++.... -> []数种利用指针操作数手段,对于内存操作非常灵活 JAVA固定了基本类型只能按值传递,对象只能按句柄(值)传递,类似某种智能指针 严格理解按值传递和句柄理解,严防不合理修改对象数据...也可以自己实现clone(),hashCode(),equals()来实现细节 3.6 数组 C++数组是连续内存空间 数组常用于申请一块内存供任何用途,从而缺乏对指针控制,应该学习JAVA数组,...权限内容 4.5 构造器 C++初始化列表,可以在其中选择不同构造函数 JAVA在子类构造器中假模假样调用一下选择构造器,实际上那行代码并非在那个时间被调用 JAVA缺乏明确初始化个成员以及自己语法

2.6K40

c++面试选择题_C语言经典笔试题

对于内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象在创建同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。...定义一个对象先调用构造函数、然后调用派生构造函数;析构时候恰好相反:先调用派生析构函数、然后调用析构函数。...从继承来纯虚函数,在派生中仍是虚函数。 抽象中不仅包括纯虚函数,也可包括虚函数。抽象必须用作派生其他,而不能用于直接创建对象实例。但仍可使用指向抽象指针支持运行时多态性。...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建指针可以随时指向任意类型内存块。...注意当数组作为函数参数进行传递,该数组自动退化为同类型指针

1.1K10

TarsCpp 组件 之 智能指针详解

引用计数原理 引用计数是智能指针一种通用实现技术,上图为大致流程,基本原理如下: 1.在每次创建新对象,初始化指针并将引用计数置 1; 2.当对象作为另一对象副本而创建(复制构造函数),复制对应指针并将引用计数...+1; 3.当对一个对象进行赋值,赋值操作符 = 将左操作数所指对象引用计数 -1,将右操作数所指对象引用计数 +1; 4.调用析构函数数,引用计数 -1; 5.上述操作中,引用计数减至 0 ...在 TARS 中,智能指针 TC_AutoPtr 是一个模板,支持拷贝和赋值等操作,其指向对象必须继承自智能指针 TC_HandleBase ,包含了对引用计数加减操作。...而通常对于原子类型而言,并发访问某个对象(如果不做任何同步操作)会导致未定义 (undifined) 行为发生。...智能指针 TC_HandleBase TC_HandleBase 是 TARS 智能指针,包含两个成员变量 _atomic 和 _bNoDelete,定义如下 TC_HandleBase,为

89220

《逆袭进大厂》第二弹之C++进阶篇59问59答(超硬核干货)

1、 动态数组管理new一个数组,[]中必须是一个整数,但是不一定是常量整数,普通数组必须是一个常量整数; 2、 new动态数组返回并不是数组类型,而是一个元素类型指针; 3、 delete[]...3、构造函数不须要是虚函数,也不同意是虚函数,由于创建一个对象我们总是要明白指定对象类型,虽然我们可能通过实验室指针或引用去訪问它但析构却不一定,我们往往通过指针来销毁对象。...1) 对象生命周期结束,被销毁; 2) delete指向对象指针,或delete指向对象类型指针,而其虚构函数是虚函数; 3) 对象i是对象o成员,o析构函数被调用时,对象i...同样,进入析构函数,对象也是类型。...每次创建新对象,初始化指针并将引用计数置为1;当对象作为另一对象副本而创建,拷贝构造函数拷贝指针并增加与之相应引用计数;对一个对象进行赋值,赋值操作符减少左操作数所指对象引用计数(如果引用计数为减至

2.3K40

C++经典面试题(最全,面中率最高)

对于内部数据类型对象而言,光用maloc/free无法满足动态对象要求。对象在创建同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。...定义一个对象先调用构造函数、然后调用派生构造函数;析构时候恰好相反:先调用派生析构函数、然后调用析构函数。...抽象必须用作派生其他,而不能用于直接创建对象实例。但仍可使用指向抽象指针支持运行时多态性。...数组要么在静态存储区被创建(如全局数组),要么在栈上被创建指针可以随时指向任意类型内存块。...注意当数组作为函数参数进行传递,该数组自动退化为同类型指针

1.1K30
领券