Я хочу инициализировать закрытую статическую переменную-член закрытого типа.
Минимальный рабочий пример выглядит следующим образом.
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
(что, конечно, не идеально), но мне бы очень хотелось узнать правильное решение этой проблемы. .
Заранее спасибо.