发送的参数与函数 def 不匹配

Posted

技术标签:

【中文标题】发送的参数与函数 def 不匹配【英文标题】:parameters sent don't match the function def 【发布时间】:2015-10-23 12:25:45 【问题描述】:

我有以下适用于 Visual C++ 10 但不适用于 Linux 上的 GCC 的场景:

呼叫:

value& v;
wstring fn(L"");
char_conv::str_to_wstr( path, fn );

parse( v, ifstream( fn.c_str() ) ); //<-- ERROR

函数定义:

inline std::string parse(value& out, std::istream& is)...

这是我得到的错误:

In member function ‘std::string PrintInvoker::extractParameter(const std::string&, picojson::value&)’:
error: no matching function for call to ‘std::basic_ifstream<char, std::char_traits<char> >::basic_ifstream(const wchar_t*)’

【问题讨论】:

ifstream 只是不接受宽字符串:en.cppreference.com/w/cpp/io/basic_ifstream/basic_ifstream 您还尝试将临时绑定到非 const 左值引用,这是不允许的。 【参考方案1】:

std::idstream 有以下构造函数:

basic_ifstream();
explicit basic_ifstream( const char* filename,
            ios_base::openmode mode = ios_base::in );

explicit basic_ifstream( const string& filename,                                  
            ios_base::openmode mode = ios_base::in );

basic_ifstream( basic_ifstream&& other );

basic_ifstream( const basic_ifstream& rhs) = delete;

现在,当您调用 fn.c_str() 时,它会返回 wchar_t*,因为 fnwstrgin。如您所见,没有采用wchar_t* 的重载,因此编译器会给您一个错误。

查看我的 MSVS2015 副本,微软似乎添加了一个构造函数,该构造函数确实采用 wchar_t*,这就是它在那里工作的原因,

【讨论】:

感谢您的帮助解释。有一种方法可以通过 idstream 的构造函数转换为所需的类型。还是其他解决方案? @cristian 将fn 更改为std::string 或者您可以将其转换为:***.com/questions/4804298/…

以上是关于发送的参数与函数 def 不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Django 使用request获取浏览器发送的参数

试图创建一个线程来向套接字发送消息。遇到与线程构造函数有关的 2 个错误

03_函数

Python-5-Python函数

OCHamcrest 匹配器参数与验证时的 Mockito 模拟不兼容

dbus 信号中收到的消息与发送的数据不匹配