C++ 代码无法接受名称的输入?

C++ 代码无法接受名称的输入?,c++,visual-c++,C++,Visual C++,无法对类进行任何更改,因此我无法添加任何为我设置名称的新函数 class ele { char* name; public: ele() :name(nullptr){} ~ele() { if (name) delete[]name; } char*& GetName(); }; #endif 我试图访问该名称,但在cin调试断言失败后,它会给我错误。无效的空指针 > ` char*& ele::GetName() {

无法对类进行任何更改,因此我无法添加任何为我设置名称的新函数

class ele
{

char* name;
public:

ele() :name(nullptr){}
~ele()
{
    if (name)
        delete[]name;
}
char*& GetName(); 
};

#endif
我试图访问该名称,但在cin调试断言失败后,它会给我错误。无效的空指针

>   `     char*& ele::GetName()
    {
    cout << "Please Enter the name"<< endl;
        cin >> this->name;
        return  this->name;
      }`
`char*&ele::GetName()
{
这个->名字;
返回此->名称;
}`

如果您无法更改您的类(并使用
std::string
),您至少需要在
cin>>此->名称之前分配内存,现在您使用的是一个空poitner,它是UB。因此,您的解决方案如下所示:

if (this->name == nullptr)
   this->name = new char[64]; // << !!
cin >> this->name;
if(this->name==nullptr)
此->名称=新字符[64];/>这个->名字;

如果您无法更改您的类(并使用
std::string
),您至少需要在
cin>>此->名称之前分配内存,现在您使用的是一个空poitner,它是UB。因此,您的解决方案如下所示:

if (this->name == nullptr)
   this->name = new char[64]; // << !!
cin >> this->name;
if(this->name==nullptr)
此->名称=新字符[64];/>这个->名字;

这个->名称是
nullptr
,因为这是在构造函数中初始化它的方式。无法从
std::cin
读取到
nullptr
。您需要在某个点分配存储,并将
name
设置为指向存储。使用
std::string
可以省去很多麻烦。我很想知道
char*&
类型是什么?告诉编写这个可怕类的人,析构函数中的
nullptr
检查是多余的。@RawN这是对char*的引用,例如:
ele.GetName()=nullptr
将ele::name设置为nullptr。我不是说它有意义,
GetName
应该是一个const方法,返回
const char*
this->name
nullptr
,因为这是在构造函数中初始化它的方式。无法从
std::cin
读取到
nullptr
。您需要在某个点分配存储,并将
name
设置为指向存储。使用
std::string
可以省去很多麻烦。我很想知道
char*&
类型是什么?告诉编写这个可怕类的人,析构函数中的
nullptr
检查是多余的。@RawN这是对char*的引用,例如:
ele.GetName()=nullptr
将ele::name设置为nullptr。我不是说它有意义,
GetName
应该是一个const方法,返回
const char*