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*