Qt_C2188-负下标C2027QScopedPointer

Posted DreamLife.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt_C2188-负下标C2027QScopedPointer相关的知识,希望对你有一定的参考价值。

​ 我嘞个乖乖,这几天真是人间地狱呀,问题一串一串一串,还都是没有之前遇到的问题。这次遇到的是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,如下图所示。

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

​ 已经解决,傻了逼了。

参考链接

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


以上是关于Qt_C2188-负下标C2027QScopedPointer的主要内容,如果未能解决你的问题,请参考以下文章

错误 C2027:使用未定义类型 - 如何声明类

Python负下标

fzu2188 状压dp

hdu2188(巴什博弈)

HDU2188(巴什博奕)

HDU 2188 悼念512汶川大地震遇难同胞——选拔志愿者