这可能是一个非常愚蠢的问题,但我甚至不知道应该写什么来寻找答案.我甚至不确定我给的标题是否正确.
如果我有这样的构造函数:
CError(const std::string& msg) { showMessage(msg) }
Run Code Online (Sandbox Code Playgroud)
而且我想这样称呼它......
CError("some message");
Run Code Online (Sandbox Code Playgroud)
...一切正常,但是当在某个变量中指定了字符串时,我收到一条错误"类CError的默认构造函数不存在":
std::string str = "some message";
CError(str);
Run Code Online (Sandbox Code Playgroud)
当我这样写它时,它有效:
std::string str = "some message";
CError err(str);
Run Code Online (Sandbox Code Playgroud)
但我只是不需要这个err对象.
任何人都可以解释我为什么不能只调用构造函数本身?
提前谢谢你的答案.
该行CError(str);被解析为CError str;,定义了一个新变量str.我的编译器失败的方式不同,这使得问题更加明显:redefinition of 'str' with a different type.
解决此问题的一个简单方法是转换对象:
(void)CError(str);
Run Code Online (Sandbox Code Playgroud)
然而,亟待解决的问题是:为什么这样做?如果你不打算以任何方式使用构造的对象,为什么不简单地使它成为一个静态成员函数,甚至只是一个普通的旧函数?