我想初始化一个私有类型的私有静态成员变量。
一个最小的工作示例如下所示。
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
类中使用它(当然这不是理想的选择),但是我真的很想知道解决此问题的合适方法。
谢谢。
答案 0 :(得分:3)
您正在尝试定义一个名为desc
的全局变量(由于error::error_desc
是private
,所以该变量失败了)。
定义static
成员error::desc
的正确语法应为
const error::error_desc error::desc{0, "Ok"};
// ^^^^^^^