Статический константный член частного типа - PullRequest
0 голосов
/ 02 ноября 2018

Я хочу инициализировать закрытую статическую переменную-член закрытого типа.

Минимальный рабочий пример выглядит следующим образом.

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 file

#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 голосов
/ 02 ноября 2018

Вы пытаетесь определить глобальную переменную с именем desc (которая завершается ошибкой, как и ожидалось, потому что error::error_desc - это private).

Правильный синтаксис для определения static члена error::desc должен быть

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

ЖИТЬ

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...