我最近开始学习C ++,但是我的构造函数遇到了问题。我的类文件的简单示例
class Test {
private:
char *type;
public:
Test(const char *type); //this is my constructor
};
现在我在尝试实现构造函数时遇到了问题。
Test::Test(const char *type){
this-> type = *type;
}
我收到错误:“从'char'到'char *'的转换无效。现在我搜索了这个网站和网络上的解决方案。但是没有找到任何针对我的具体问题。我可以想象解决方案是很简单,但是对于我的爱,我无法理解。
答案 0 :(得分:1)
尝试
Test::Test(const char *type){
this-> type = type;
}
并且erip表示尝试使用std::string
。尝试尽可能使用STL。
答案 1 :(得分:1)
您的问题:
char *type;
这将type
声明为指向char
的指针。它指向到某个内存,其中(希望)有一个字符数组,以空字节结尾。
Test(const char *type);
这意味着您的类有一个接收指向const char
的指针的构造函数。
this->type = ...
此将分配给您的成员type
,即指针 type
在指向 < em>不同的内存位置。
... = *type;
不幸的是,在参数*
上使用运算符type
意味着您没有指定指针,但第一个字符type
的值指向,当然 - 这不是一个有效的记忆地址。
即使省略了*
运算符,您仍然会遇到问题:
type
是指向char
的指针。type
是指向const char
的指针。你不能将某些内容const
分配给非const
,至少不能没有广告,而 也不应该这样做。
它也是一个&#34;浅拷贝&#34;的一个例子,即你的类没有自己的拷贝它构造的字符串,但只有指向某些字符串的指针记忆它无法控制。那不是一个好的设计。
总而言之,&#34;解决方案&#34; 在这里:
使用C ++进行编程时,请按照C ++进行编程。
// Use std::string.
#include <string>
class Test {
public:
Test( const std::string & type ) : _type( type ) {}
private:
std::string _type;
};
如果您坚持使用C字符串,那将看起来像这样:
#include <cstring>
class Test {
public:
Test( const char * type )
{
// Assign memory and *copy* the string
_type = new char[ std::strlen( type ) + 1 ];
std::strcpy( _type, type );
}
~Test()
{
// Remember to *release* the memory when you are done
delete [] _type;
}
private:
char * _type;
};