Mor*_*ade -2 c++ wchar-t operator-overloading assignment-operator
我有一个名为 的类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;
}
Run Code Online (Sandbox Code Playgroud)
但它没有用。编译器给了我以下错误:
错误 C2440:“正在初始化”:无法从“const wchar_t [12]”转换为“Fstring”
我真的很困惑,我在谷歌上搜索了“重载运算符”,但所有结果都与我用来重载运算符的方式相同。那么为什么这不起作用呢?
当您看到Type name = initializer它不使用赋值运算符时。它声明了一个变量,因此是初始化(技术上来说是copy-initialization或copy-list-initialization)。这意味着它调用了一个构造函数。由于您没有接受 a 的构造函数,因此const wchar_t*您将收到错误消息。
你需要的是实现一个构造函数,它接受 aconst 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'\0'
}
Run Code Online (Sandbox Code Playgroud)
您还必须实现一个复制构造函数。有关为什么的更多信息,请参阅什么是三的规则?
请注意,您正在重新发明轮子。如果你想要一个宽字符串,你可以使用std::wstring它已经为你完成了所有这些。