不能用于初始化 const std::string * 类型的实体

Posted

技术标签:

【中文标题】不能用于初始化 const std::string * 类型的实体【英文标题】:cannot be used to initialize an entity of type const std::string * 【发布时间】:2014-06-25 18:33:36 【问题描述】:

我在头文件中定义了以下常量:

class Example 

public:
    const static string* days_strs[];
    const static char* days_chars[];
;

并在 example.cpp 文件中实现它们:

    const static string* Example::days_strs[] = "monday", "tuesday", ...;
    const static char* Example::days_chars[] = "m", "t", ...;

我为什么要得到 ​​p>

days_str[]

“错误:值“const char*”不能用于初始化“const std::string *”类型的实体

【问题讨论】:

尝试删除 *: const static string Example::days_strs[] = "monday", "tuesday", ... 和类似的 days_chars。对于days_chars,使用单引号,例如'm', 't', etc. 只需使用const std::string。根本不需要指针。您可能还想要第二个 const char,因为它们是单个字符。 嗯,string* Example::days_strs[]string 指针的静态数组。你想要的是一个字符串数组,而不是字符串指针。与days_chars 类似,您需要一个字符数组,而不是字符指针数组。 谢谢大家的回答!对不起愚蠢的问题。我是 C++ 新手,特别是这个指针... @Xerath 没有愚蠢的问题,至少我是这么认为的。祝您在 C++ 之旅中好运。 【参考方案1】:

我认为你的意思是以下

class Example 

public:
    const static string days_strs[];
    const static char* days_chars[];

;

//...

   const string Example::days_strs[] = "monday", "tuesday", ...;
   const char* Example::days_chars[] = "m", "t", ...;

【讨论】:

以上是关于不能用于初始化 const std::string * 类型的实体的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 UTF-8 字符序列在 C++ 中初始化 const char* 和/或 const std::string?

c++中出现 无法从“CString”转换为“const std::string”错误

为啥创建静态 const std::string 会导致异常?

为啥创建静态 const std::string 会导致异常?

返回 const std::string& 的方法应该返回 const std::string_view 吗?

为什么“auto”将字符串声明为const char *而不是std :: string?