Qt_C2188-负下标、C2027、QScopedPointer

头图

​ 我嘞个乖乖,这几天真是人间地狱呀,问题一串一串一串,还都是没有之前遇到的问题。这次遇到的是C2118:负下标错误。真是没有天理了,这个代码是之前用着没有问题的呀,这个代码也是vtk的代码呀,我嘞个乖乖。

​ 本次就是在抄VTKQVTKOpenGLNativeWidget代码时候遇到的问题,这个代码在之前使用时没有问题的,这次问题出在哪里,还没有找到呢。

​ 这里用到了QScopedPointer,可以扒一扒。

一句话解决问题,包含对应头文件即可


[TOC]

关键字: C2118Qt负下标C2027QScopedPointer

C2118:负下标错误

​ 导致出错的代码 QScopedPointer<QVTKRenderWindowAdapter> RenderWindowAdapter;

报错信息:

C:\Qt\Qt5.14.2\5.14.2\msvc2015_64\include\QtCore\qscopedpointer.h:57: error: C2118: 负下标

​ 点击错误,定位到了下面的内容:

在这里插入图片描述

​ 翻一下:执行完整类型,如果你在这里遇到编译错误,请阅读forward声明一节,QScopedPointer文档中的类。

QScopedPointer

​ QScopedPointer和C++中的智能指针std::unique_ptr其概念是一样的,他包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确的删除。但他有更严格的所有权,并且不能转让,一旦获取了对象的管理权,你就无法在从它哪里取回来。也就是说,只要出了作用域,指针就会被自动删除,因为他的拷贝和赋值操作都是私有的,与QObject及其派生类风格相同。

看下官方示例:

​ 没有使用只能指针的代码

  void myFunction(bool useSubClass)
  {
      MyClass *p = useSubClass ? new MyClass() : new MySubClass;
      QIODevice *device = handsOverOwnership();

      if (m_value > 3) {
          delete p;
          delete device;
          return;
      }

      try {
          process(device);
      }
      catch (...) {
          delete p;
          delete device;
          throw;
      }

      delete p;
      delete device;
  }

​ 上面的写法,稍有不慎就会导致内存泄露,但是如果使用了只能指针,就会变得简单:

  void myFunction(bool useSubClass)
  {
      // assuming that MyClass has a virtual destructor
      QScopedPointer<MyClass> p(useSubClass ? new MyClass() : new MySubClass);
      QScopedPointer<QIODevice> device(handsOverOwnership());

      if (m_value > 3)
          return;

      process(device);
  }

C2027错误

​ 使用了QScopedPointer是绝对不是引发这种错误的,所以,问题还得看别处。这里我还看到了另一错误 C2027,如下图所示。

在这里插入图片描述

​ 这里面看到一个关键字,声明,难道是没有包含头文件

image-20211017161224460

​ 已经解决,傻了逼了。

参考链接

http://www.voidcn.com/article/p-yhjkkrsi-bwc.html

https://www.orcode.com/question/328389_k7b0cd.html

http://www.wisestudy.cn/opentech/error_C2118_nega_index.html

https://blog.csdn.net/luoyayun361/article/details/90228638


博客签名2021
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DreamLife.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值