私有类型的静态const成员

时间:2018-11-02 00:28:04

标签: c++ c++11 static

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

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

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_desc移至public部分可以使程序正常编译。

还有其他方法可以解决此问题,但仍将类型保留为私有。 我能想到的唯一解决方法是将error::error_desc封装在detail命名空间中,并在error类中使用它(当然这不是理想的选择),但是我真的很想知道解决此问题的合适方法。

谢谢。

1 个答案:

答案 0 :(得分:3)

您正在尝试定义一个名为desc的全局变量(由于error::error_descprivate,所以该变量失败了)。

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

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

LIVE