Bar*_*Das 22 c++ compiler-errors
这个错误信息是什么意思?
error: call of overloaded ‘setval(int)’ is ambiguous
huge.cpp:18: note: candidates are: void huge::setval(unsigned int)
huge.cpp:28: note: void huge::setval(const char*)
Run Code Online (Sandbox Code Playgroud)
我的代码看起来像这样:
#include <iostream>
#define BYTES 8
using namespace std ;
class huge {
private:
unsigned char data[BYTES];
public:
void setval(unsigned int);
void setval(const char *);
};
void huge::setval(unsigned int t) {
for(int i = 0; i< BYTES ; i++) {
data[i] = t;
t = t >> 1;
}
}
void huge::setval(const char *s) {
for(int i = 0; i< BYTES ; i++)
data[i] = s[i];
}
int main() {
huge p;
p.setval(0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*nau 21
文字0在C++中有两个含义.
一方面,它是一个值为0的整数.
另一方面,它是一个空指针常量.
由于你的setval函数可以接受a int或a char*,编译器无法决定你的意思.
最简单的解决方案是将其0转换为正确的类型.
另一种选择是确保int首选过载,例如通过使另一个成为模板:
class huge
{
private:
unsigned char data[BYTES];
public:
void setval(unsigned int);
template <class T> void setval(const T *); // not implemented
template <> void setval(const char*);
};
Run Code Online (Sandbox Code Playgroud)
Leo*_* L. 13
如果我们考虑常量值的类型,解决方案非常简单,常量值应该是"unsigned int"而不是"int".
代替:
setval(0)
Run Code Online (Sandbox Code Playgroud)
使用:
setval(0u)
Run Code Online (Sandbox Code Playgroud)
后缀"u"告诉编译器这是一个无符号整数.然后,不需要转换,并且呼叫将是明确的.
| 归档时间: |
|
| 查看次数: |
86526 次 |
| 最近记录: |