【发布时间】:2009-09-28 20:11:24
【问题描述】:
假设我有这个课程:
class Foo {
public:
void member(std::string s);
void member(int64_t &n);
};
现在我想做一些类似的事情
int64_t value = 5;
Foo f;
f.member(value);
问题是编译器(至少是 GCC)感到困惑,并认为我正在尝试使用 char* 构造函数调用带有字符串的成员:
从“int64_t”到“const char*”的无效转换如何在不更改方法签名的情况下调用我想要的实际成员函数?模板是唯一的解决方案吗?我已经尝试在没有任何帮助的情况下进行投射(这无关紧要,因为类型已经明确)。
抱歉 - 发现错误。
声明是:
class Foo {
public:
void member(std::string s);
void member(int64_t &n);
};
删除 by-ref 解决了它。
【问题讨论】:
-
我无法在 Ubuntu 上使用 GCC 3.3、4.2 或 4.4 或在 Solaris 10 上使用 GCC 3.4 重现该错误。
-
你是对的 - 出于某种原因,我试图简化为简单案例的尝试失败了。这是我的实际代码的编译器错误 - 也许我错过了其他东西。
-
现在更改为
int64_t&对我来说不再有意义,为什么它应该无法编译。