c++ - 私有类型的静态 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_desc
该public
部分使程序可以正常编译。
有没有其他方法可以解决这个问题,仍然保持类型私有。我能想到的唯一解决方法是包含error::error_desc
在detail
命名空间中并在类中使用它error
(这当然不理想),但我真的很想知道这个问题的正确解决方案。
先感谢您。
解决方案
您正在尝试定义一个名为的全局变量desc
(它按预期失败,因为error::error_desc
is private
)。
static
定义成员的正确语法error::desc
应该是
const error::error_desc error::desc{0, "Ok"};
// ^^^^^^^
推荐阅读
- python - 在 tensorflow 数据集 API 中使用 Almentation 的扩充会给出此错误:不兼容的形状预期 [?,224,224,3] 但得到 [8,1,224,224,3]
- javascript - 获取文本而不是下拉列表的值以填充另一个输入字段
- c - 使用 fread() 以块打印管道输出,但 fread() 未读取最后一个块
- javascript - 如何使用正则表达式将承诺模式转换为可观察模式?
- javascript - 解析错误:相邻的 JSX 元素必须包含在封闭标记中(React.js)
- react-native - 在本机反应中使用 Firestore 更新查询
- html - 引导工具提示在悬停时隐藏
- git - 将提交转移到新的远程
- c# - 将 IMessage Protobuf 序列化为 json C#
- intellij-idea - 无法在 IntelliJ IDEA“数据库”插件中显示 Hive 表