【发布时间】:2015-11-16 13:01:36
【问题描述】:
我最近在使用 C++03 时遇到了一个非常讨厌的问题。
我需要创建一个新的字符串类来扩展std::string 的功能,提供额外的方法和更方便的处理。
一切进展顺利,除了一个问题:如果某个函数需要一个 MyString 参数并被赋予一个字符串文字(即 "Hello"),它无法将 const char[6] 转换为 MyString,尽管事实上MyString 有一个接受 std::string 的 c'tor。
例如,这些行将起作用:
MyString mStr("Hello");
MyString mStr = "Hello";
但是这段代码不起作用:
void myFunc(const MyString& mStr);
myFunc("Hello");
因为"no constructor exists that can perform the conversion from const char[6] into MyString"。
添加一个接受 const char * 的 c'tor 无助于解决问题,甚至尝试用不同组合的 explicit 标记它们也无济于事。
在这个错误上花费了几个小时之后,我得出的结论是,它可能无法做这样的事情,因为它可能需要编译器不会执行的两个隐式转换,但是正如我所说,添加一个来自const char * 的 c'tor 在 1 步中启用转换并没有改变任何东西。所以在我放弃之前,你们有没有什么想法可以解决这个问题?
【问题讨论】:
-
添加构造函数
MyString(const char *)绝对可以。在这种情况下,您遇到了什么错误? -
你能展示一下类和所有的构造函数吗?
-
@rodrigo,目前的 c'tors 是:MyString(); MyString(const char* str); MyString(const std::string& str);我得到的错误是:“错误 C2664:无法将参数 1 从 'const char *' 转换为 MyString'”
-
@OmriP:我刚刚尝试了一个带有这两个构造函数的类,
myFunc("hello")编译得很好。你真的应该向我们展示你的代码。 -
请创建一个Minimal, Complete, and Verifiable Example 并告诉我们。同时向我们展示exact、complete和unedited构建日志。
标签: c++ string visual-c++ constructor c++03