如何解决我无法为动态cstring分配值并修改它们
对于家庭作业问题,我需要实现一个cstring类和重载运算符。但是,我在初始化char数组时遇到麻烦。在以下代码中,
StringClass::StringClass()
{
c = new char[10];
c = "Default";
stringlength = strlen(c);
}
#pragma once
#include <fstream>
class StringClass
{
private:
char* c;
int stringlength;
public:
StringClass();
~StringClass();
void print()const;
StringClass(char*,int);
StringClass(const StringClass*);
StringClass& operator=(const StringClass*);
friend std::istream& operator>>(std::istream&,StringClass*);
friend std::ostream& operator<<(std::ostream&,const StringClass*);
StringClass& operator+(const StringClass*);
char operator[](int);
};
对于行c =“默认”; 我收到一个错误const char *无法分配给char *,但我没有将c设置为const。如果将char c更改为const char c,则可以在构造函数中将其设置为default,但是无法对其进行进一步修改。为什么会这样?
编辑:我可以将声明更改为此,并且它可以正常工作。这是正确的方法吗?
c = new char[10]{ "Default" };
完整的实现文件,
#include "StringClass.h"
#include <fstream>
#include <iostream>
StringClass::StringClass()
{
c = new char[10];
c = "Default";
stringlength = strlen(c);
}
StringClass::~StringClass()
{
c = NULL;
delete c;
}
void StringClass::print()const
{
for (int i = 0; i < 10; ++i)
std::cout << c[i];
std::cout<< std::endl;
std::cout << stringlength;
}
StringClass::StringClass(const StringClass* p)
{
for (int i = 0; i < 10; ++i)
{
c[i] = p->c[i];
}
stringlength = p->stringlength;
}
StringClass& StringClass::operator=(const StringClass* a)
{
if (this == a)
return *this;
else
{
for(int i = 0; i < 10; ++i)
c = &a->c[i];
stringlength = a->stringlength;
}
return *this;
}
//std::istream& operator>>(std::istream& in,StringClass* a)
//{
//in >> a->c >> a->stringlength;
//return in;
//}
std::ostream& operator<<(std::ostream& out,const StringClass* a)
{
out << a->c << " " << a->stringlength << std::endl;
return out;
}
StringClass& StringClass::operator+(const StringClass* a)
{
StringClass temp;
temp.c = c + *a->c;
temp.stringlength = stringlength + a->stringlength;
return temp;
}
char StringClass::operator[](int a)
{
return c[a];
}
解决方法
c = new char[10]{ "Hello" };
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。