首页 > 解决方案 > 私有类型的静态 const 成员

问题描述

我想初始化一个私有类型的私有静态成员变量。

一个最小的工作示例如下所示。

error.hpp文件

#pragma once

class error {
 public:
  error();
  ~error();

 private:
  struct error_desc {
    int code;
    const char *desc;
    error_desc(int c, const char *d) : code{c}, desc{d} {}
  };

  static const error_desc desc;
};

error.cpp文件

#include "pch.h"
#include "error.h"

const error::error_desc desc{0, "Ok"};

error::error() {}

error::~error() {}

显然,这会导致错误,因为error::error_desc类型是私有的。移至error_descpublic部分使程序可以正常编译。

有没有其他方法可以解决这个问题,仍然保持类型私有。我能想到的唯一解决方法是包含error::error_descdetail命名空间中并在类中使用它error(这当然不理想),但我真的很想知道这个问题的正确解决方案。

先感谢您。

标签: c++c++11static

解决方案


您正在尝试定义一个名为的全局变量desc(它按预期失败,因为error::error_descis private)。

static定义成员的正确语法error::desc应该是

const error::error_desc error::desc{0, "Ok"};
//                      ^^^^^^^

居住


推荐阅读