C++在使用转换(STL)时出错
C++ error in using transform (STL)
我在使用transform:时遇到编译错误
这与我之前的问题有关:C++:如何将字符串对象复制到int数组?)
enter code here
class BinaryCode {
public:
int get_digit(char c)
{
return c-'0';
}
void decode(string decd)
{
int i;
std::vector<int>decoded(decd.size());
std::transform(decd.begin(), decd.end(), decoded.begin(), get_digit);
int length=decoded.length();
错误为:
enter code here
[root@localhost topcoder]# g++ prog1.c
prog1.c: In member function `void BinaryCode::decode(std::string)':
prog1.c:20: error: argument of type `int (BinaryCode::)(char)' does not match `int (BinaryCode::*)(char)'
有人能帮我吗?我使用的是gcc(g++)编译器。
最好的IMHO是更改的定义
int get_digit(char c)
至
static int get_digit(char c)
它应该与此(静态函数)一起工作。可以使用成员函数进行转换,但稍微复杂一些。此外,您不需要它。
您需要传递一个函数或函子作为最后一个参数,而不是成员函数。如果您启用了c++11,则可以使用lambda:
std::transform(decd.begin(), decd.end(), decoded.begin(),[this](const char it){ this->get_digit(it) } );
由于您没有c++11特性,您可以将get_digit转换为一个函数(类外):
int get_digit(char c)
{
return c-'0';
}
class BinaryCode {
public:
void decode(string decd)
{
int i;
std::vector<int>decoded(decd.size());
std::transform(decd.begin(), decd.end(), decoded.begin(), get_digit);
int length=decoded.length();
}
};
或者创建一个函数:
struct get_digit
{
int operator()(char c) const
{
return c-'0';
}
};
//...
std::transform(decd.begin(), decd.end(), decoded.begin(), get_digit());
//...
1>您可以将get_digit移到BinaryCode之外,然后您的代码将工作
2>或者,如果您希望get_digit是一个非静态成员函数,那么您可以使用
class BinaryCode {
public:
int get_digit(char c)
{
return c-'0';
}
void decode(string decd)
{
int i;
std::vector<int>decoded(decd.size());
std::transform(decd.begin(), decd.end(), decoded.begin(), std::bind1st(std::mem_fun(&BinaryCode::get_digit),this));
}
};
3> 当然,如果您可以访问boost或c++11,那么您可以像其他人已经展示的那样轻松地使用lambda。
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 调用专用模板时出错"no matching function for call to [...]"
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- LINK 尝试使用 OpenSSL evp aes 256 c++ 时出错
- 在Google Kick start中提交时出错
- 在c++中访问int到类对象的映射时出错
- 在C应用程序中运行C++(带有STL)函数
- 为什么 stl 字符串C++函数有时出错有时会出错?
- STL 容器在函数中作为模板参数,在调用中出错
- 将 lambda 传递给 STL 集时出错"bad function call"
- 使用列表 STL 时出错
- stl:map插入值时出错
- 将"using namespace boost::numeric::ublas;"与 stl 矢量一起使用时出错
- 自定义迭代器和 STL 算法出错
- C++在使用转换(STL)时出错