我有一个名为 Fstring
的类,其中有一个 wchar_t*
。
我写了以下内容,将字符串文字复制到 Fstring
:
#include <iostream>
using namespace std;
class Fstring{
wchar_t *arr;
public:
Fstring& operator = (const wchar_t temp[])
{
delete [] arr;
arr=new wchar_t[wcslen(temp)];
for(int i=0;i<=wcslen(temp);i++)
arr[i]=temp[i];
return *this;
}
};
int main()
{
Fstring test=L"Hello World";
return 0;
}
,但它行不通。编译器给我以下错误:
错误c2440:'初始化':不能从'const wchar_t [12]'转换 到" fstring'
我真的很困惑,我搜索了"超载运算符",但所有结果都与用来超载运算符的方式相同。那么为什么这不起作用?
当您看到Type name = initializer
时,它不会使用分配操作员。它正在声明一个变量,因此正在初始化(技术上 copy-initialization 或 copy-list-initialization (。这意味着它称为构造函数。由于您没有采用const wchar_t*
的构造函数,您将获得错误。
您需要的是实现一个构造函数,该构造函数使用const wchar_t*
并初始化arr
。看起来像
Fstring(const wchar_t temp*) : arr(new wchar_t[wcslen(temp) + 1])
{
size_t size = wcslen(temp);
for(int i = 0; i < size; i++)
arr[i] = temp[i];
arr[size] = L' '
}
您还必须实现复制构造函数。有关为什么三个规则是什么?
请注意,您正在重新发明轮子。如果您想要一个宽字符串,可以使用为您完成所有这些的std::wstring
。