当前位置: 首页 > 知识库问答 >
问题:

静态常数std::vector

柴宏阔
2023-03-14

我正在用Qt编写一个图像查看器。我试图在头文件中执行以下操作:

class ImageModel
{


private:
    const static std::vector<int> mZoomLevels;

}

在源文件中:

int zooms[] = {1,2,3,4,5,6,7,8,9,10};
const std::vector<int> mZoomLevels(zooms.begin(),zooms.end());

然而,我得到了以下错误:

在非类类型int[10]的缩放中请求成员开始,在非类类型int[10]的缩放中请求成员结束

有人知道如何初始化这个静态const private成员吗?

共有3个答案

赫连明诚
2023-03-14

Zooms是一个C风格的数组,没有成员和方法,即zooms.beginzooms.end没有意义。如果您使用C 11兼容的编译器,请尝试std::begin(zooms)andstd::end(zooms)

严宏朗
2023-03-14

数组没有开始结束成员。您可以将数组名用于开始,将数组名加长度用于结束:

const std::vector mZoomLevels(zooms, zooms+10);

在C 11中,可以使用std::beginstd::end,如下所示:

const std::vector mZoomLevels(std::begin(zooms), std::end(zooms));

在这两种情况下,最好将数组文件声明为静态或隐藏在命名空间中,以确保其名称不会“污染”全局命名空间。

于高雅
2023-03-14

普通数组没有成员函数。我相信你在寻找这个:

int zooms[] = {1,2,3,4,5,6,7,8,9,10};
const std::vector ImageModel::mZoomLevels(zooms, zooms + 10);
 类似资料:
  • 我试图创建一个查找表,以便轻松创建具有不同值的对象。为此,我需要在类中使用一个静态std::数组填充数据。目前看起来是这样的: 它工作正常,如果我删除std::字符串,但与std::字符串我得到编译错误

  • 这个问题是关于实施d::add问题的后续_pointer 在std::add\u指针下 有以下参考: 否则(如果T是cv或ref限定函数类型),则提供成员类型DEF type,即类型T。 基于阅读非静态成员函数:const-、vole-和ref限定的成员函数,我的理解是a对于具有给定和/或限定的非静态成员函数, a)函数的限定也适用于指针,在函数的范围内 b) 函数的限定不适用于函数范围内的指针

  • 两者之间有实际区别吗 和 ? 看起来包含常量元素的非常量数组仍然无法交换,赋值运算符也不起作用<我什么时候应该选择一个而不是另一个?

  • 问题内容: 我对php中的静态功能有疑问。 假设我有一堂课 如果我这样做的话,没有问题。 也可以。 头等舱和二等舱有什么区别? 静态函数有什么特别之处? 问题答案: 在第一个类中,实际上是一个实例方法,您将其作为静态方法进行调用,但由于从未引用,所以您将其取消。 静态函数与该类相关联,而不是该类的实例。因此,在静态上下文中不可用(未指向任何对象)。

  • 静态模板类: 类文件 include/dedetag.class.php 这个文件是dedecms V5.3及之前版本使用的主要的模板类,它是解析式模板类,并非编译式的(区别是前者通过获得标签位置进行内容替换,后者是直接解析式PHP代码,二次执行) 一、模板语法 织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML

  • 问题内容: 我正在查看公司其他部门维护的一些Java代码,顺便说一下,这是一些前C和C ++开发人员所维护的。普遍存在的一件事是使用静态整数常量,例如 除了缺少“最终”限定符外,这种代码也让我有些不安。我本来希望看到的是,从学校开始主要接受Java的培训,这会更像 但是,论点使我失望。为什么要比后者更好呢? 问题答案: 为什么要比后者更好呢? 这样做要好得多,因为它可以为您提供类型安全性并具有自记