如果我尝试使用gcc的iOS4 sdk版本编译下面的代码。
它给我的错误:从“为const char [4]”如何修复GCC编译中的const char *构造函数转换链错误
转换到非标量类型“UsesStr”请求
class strptr {
public:
strptr(const char * s) : s_(s) {}
const char *c_str() const { return(s_); }
protected:
const char *s_;
};
class UsesStr {
public:
UsesStr(const strptr &sp)
: p_(sp.c_str())
{
}
const char *p_;
};
static UsesStr ustr = "xxx";
这是一个简单的例子,这是一个问题是当strptr是一个代替使用的字符串类,但错误是相同的。
根据以下答案我试过这似乎工作。 希望拥有一个“通用”字符串arg,它将接受许多类型的字符串,因为它将转换放入构造函数中以将所有转换分解出来,而不需要对仅使用一种类型的东西的所有可能字符串类型进行完整声明。
class UsesStr;
class strptr {
public:
strptr(const char * s) : s_(s) {}
strptr(UsesStr &s);
const char *c_str() const { return(s_); }
operator const char *() const { return(s_); }
private:
const char *s_;
};
class UsesStr {
public:
template<typename arg>
UsesStr(const arg &sp)
: p_(strptr(sp).c_str())
{}
UsesStr(const strptr &sp) : p_(sp.c_str())
{}
const char *p_;
operator const strptr() const { return(strptr(p_)); }
};
strptr::strptr(UsesStr &s)
: s_(s.p_) {}
static UsesStr ustr = "xxx";
static UsesStr ustr2 = ustr;
static strptr sp = ustr2;
static UsesStr ustr3 = sp;
上面的代码没有strptr的构造函数吗?或者你的意思是不是一个const&strptr?谢谢。 – peterk