我有这个c ++类。
class Dinosaur {
public:
Dinosaur();
...
private:
char* name_str_pointer;
...
}
我尝试使用从恐龙到char *的隐式转换,因此这行可以将" velociraptor" 与 name_str_pointer 进行比较。
Dinosaur d();
strcmp(d, "velociraptor");
返回
error: cannot convert ‘const Dinosaur’ to ‘const char*’ for argument ‘1’ to ‘int strcmp(const char*, const char*)’
我怎样才能做到这一点?
答案 0 :(得分:2)
尝试以下
class Dinosaur {
public:
Dinosaur();
operator char *() const { return name_str_pointer; }
...
private:
char* name_str_pointer;
//...
};
//...
Dinosaur d;
strcmp(d, "velociraptor");
考虑到你必须在默认构造函数中分配name_str_pointer指向的足够内存,以容纳字符串文字“velociraptor”。您还需要定义复制构造函数,复制赋值运算符和析构函数。无论如何,这种方法不安全,
如果不使用指针和动态分配的内存而使用标准类std::string
例如
class Dinosaur {
public:
Dinosaur( const std::string &name ) : name_str_pointer( name ) {}
operator const std::string &() const { return name_str_pointer; }
...
private:
std::string name_str_pointer;
//...
};