在GCC编译器中创建一个新的字符串类并为其分配一个char*数组时遇到一个奇怪的问题。源代码:
#include "../Include/StdString.h"
StdString::StdString()
{
//ctor
internstr = std::string();
}
char* StdString::operator=(StdString other) {
return other.cstr();
}
StdString StdString::operator+(StdString other) {
StdString newstr = StdString();
newstr.internstr = internstr+other.internstr;
return newstr;
}
void StdString::operator=(char* other) {
internstr = other;
}
StdString::~StdString()
{
//dtor
}
char* StdString::cstr() {
return (char*)internstr.c_str();
}错误:请求从char*转换为非标量类型StdString。
std::string是如何完成他们的任务的?
发布于 2011-09-21 10:30:51
string可以进行转换,因为它定义了一个conversion constructor。就像这样。
class std::string {
// ...
std::string(const char *);
};注意:实际的std::string更加复杂。
使用赋值运算符,您应该能够执行以下操作
StdString str;
str = "hello";但不是
StdString str = "hello";发布于 2011-09-21 10:44:03
您遇到的错误是没有提供接受char*的构造函数。这是编译器抱怨缺少的转换函数。
StdString::StdString(char const* s)
{
// ...
}此外,如果你的内部字符串是一个std::string,那么你不需要任何赋值操作符,复制构造函数和析构函数。一旦添加了char*转换构造函数,编译器提供的赋值操作符也可以神奇地用于char*。不是很神奇:编译器会发现它可以通过转换构造函数将char *转换为StdString,然后将其与隐式赋值操作符一起使用。
您还可以将默认构造函数的定义保留为空;这将为所有成员提供默认构造,这可能已经足够好了。
发布于 2011-09-21 10:46:34
StdString mystr =“您好世界!”;
需要复制构造函数。
尝试添加以下内容:
StdString::StdString(const char* other)
{
internstr = other;
}https://stackoverflow.com/questions/7493887
复制相似问题