首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奇怪的赋值问题- C++

奇怪的赋值问题- C++
EN

Stack Overflow用户
提问于 2011-09-21 10:23:34
回答 5查看 316关注 0票数 2

在GCC编译器中创建一个新的字符串类并为其分配一个char*数组时遇到一个奇怪的问题。源代码:

代码语言:javascript
复制
#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是如何完成他们的任务的?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-21 10:30:51

string可以进行转换,因为它定义了一个conversion constructor。就像这样。

代码语言:javascript
复制
class std::string {
  // ...
std::string(const char *);
};

注意:实际的std::string更加复杂。

使用赋值运算符,您应该能够执行以下操作

代码语言:javascript
复制
StdString str;
str = "hello";

但不是

代码语言:javascript
复制
StdString str = "hello";
票数 2
EN

Stack Overflow用户

发布于 2011-09-21 10:44:03

您遇到的错误是没有提供接受char*的构造函数。这是编译器抱怨缺少的转换函数。

代码语言:javascript
复制
StdString::StdString(char const* s)
{
    // ...
}

此外,如果你的内部字符串是一个std::string,那么你不需要任何赋值操作符,复制构造函数和析构函数。一旦添加了char*转换构造函数,编译器提供的赋值操作符也可以神奇地用于char*。不是很神奇:编译器会发现它可以通过转换构造函数将char *转换为StdString,然后将其与隐式赋值操作符一起使用。

您还可以将默认构造函数的定义保留为空;这将为所有成员提供默认构造,这可能已经足够好了。

票数 1
EN

Stack Overflow用户

发布于 2011-09-21 10:46:34

StdString mystr =“您好世界!”;

需要复制构造函数。

尝试添加以下内容:

代码语言:javascript
复制
StdString::StdString(const char* other)
{
    internstr = other;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7493887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档