C++需要从常量字符串转换的解决方案
C++ Need Solution for converting from const string
我有一个(小)问题。我打算用C++编写一个小字符串类,它应该允许您以与 C# 中的字符串相同的方式使用字符串。
我写了下面的类:
class STRING
{
private:
char * data;
int length;
public:
STRING();
STRING(char * data);
//string(char[] data, int length);
void setData(char * data);
int Length();
char * toString();
STRING operator = (STRING data);
STRING operator = (char * data);
STRING operator = (char data);
STRING operator = (const string data);
STRING operator + (STRING data);
friend ostream& operator<<(ostream&os, const STRING& data);
void display();
};
它正在工作。但我有一个问题。如果我尝试启动类的新对象并想用如下值设置它:
STRING test1;
test1 = "TEST";
编译器给我以下警告:
警告:已弃用从字符串常量到"char*"的转换[-Wwrite-strings] test1 = "TEST";
所以我尝试以操作重载的形式获得解决方案。我试过这个:
STRING STRING::operator = (const string data)
{
char * tmp;
int laenge;
tmp = (char *) data
laenge = strlen(tmp);
this->data = new char[laenge + 1];
this->length = laenge;
strcpy(this->data, tmp);
}
但它不起作用,我没有想法。当然,如果我通过以下方式启动它,它将起作用:
STRING test1;
test1 = (char *) "TEST";
但我的梦想是像这样使用它:字符串测试1; test1 = "TEST"; 或字符串测试1 = "测试";
你需要
一个需要const char*
的重载
STRING STRING::operator = (const char* s)
{
if (data != nullptr)
delete [] data;
length = strlen(s);
data = new char[length + 1];
strcpy(data, s);
}
你需要一个重载函数来const char*
但你也可以使用一个更快的模板函数:
template<int length>
STRING STRING::operator = (const char (&s)[length])
{
//resize or allocate data if needed
strncpy(data, s, length);
}
您可以在以下函数中将参数类型从char*
更改为char const*
。
STRING(char * data);
STRING operator = (char * data);
此外,作为一般改进的问题,您可以更改
STRING operator = (STRING data);
STRING operator = (const string data);
STRING operator + (STRING data);
自
STRING& operator = (STRING const& data);
STRING& operator = (const string& data);
STRING operator + (STRING const& data) const;
请参阅 http://en.cppreference.com/w/cpp/language/operators 为什么我建议的原型比您拥有的原型更合适。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- 如何将这种递归解决方案转换为分而治之?
- 将多个非原始递归调用转换为迭代解决方案
- 我在 TSP 的C++解决方案中遇到转换错误
- 如何在C VS2012中转换或创建.NET V3.5解决方案(特别是工具集)
- 数据转换解决方案
- 将递归解决方案转换为迭代解决方案
- 如何将递归解决方案转换为自下而上或自上而下的解决方案
- 将一维矩阵数组转换为主一维矩阵的有趣算法挑战,需要有效的解决方案
- 如何将递归解决方案转换为迭代解决方案
- 将int转换为void*会丢失精度,在需要的情况下解决方案是什么
- 将此自定义回合转换为数学更友好的解决方案
- 将'makefile.vc'转换为'.sln'解决方案文件
- 通用转换运算符模板和移动语义:有通用的解决方案吗
- C++需要从常量字符串转换的解决方案
- 转换vc++解决方案和项目文件从32位到64位
- 如何在c++11中将迭代器转换为字符串?boost解决方案也可以
- Visual Studio 2010 2005解决方案的转换(c++项目)失去了项目依赖关系