static const std :: vector

Cri*_*sti 3 c++ static const private-members

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

class ImageModel
{


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

}
Run Code Online (Sandbox Code Playgroud)

在源文件中:

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

但是我收到以下错误:

在缩放中请求成员'begin'是非类类型'int [10]'对于非类类型'int [10]'的缩放中成员'end'的请求

有谁知道如何初始化这个静态const私有成员?

Rei*_*ica 5

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

int zooms[] = {1,2,3,4,5,6,7,8,9,10};
const std::vector ImageModel::mZoomLevels(zooms, zooms + 10);
Run Code Online (Sandbox Code Playgroud)


das*_*ght 5

数组没有beginend成员.您可以使用数组名称begin和数组名称以及结尾的长度:

const std::vector mZoomLevels(zooms, zooms+10);
Run Code Online (Sandbox Code Playgroud)

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

const std::vector mZoomLevels(std::begin(zooms), std::end(zooms));
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您有C++ 11并且想要初始化向量,则无需创建数组,只需使用*list-initialization*:`const std :: vector <int> ImageModel :: mZoomLevels {1,2, 3,4 ...};` - 无代码,你删除一个不需要的数组.那就是如果你真的*想要使用`std :: vector <int>`...我不太确定... (2认同)