我试图学习如何使用类来保存多个值并从函数返回一个实例。另一个选择是使用全局变量,这可能更简单,但我想学习C ++中的类。
唯一给我带来麻烦的是从构造函数参数中分配字符串字段。我已尝试过此代码的几种变体,但都没有编译。
这是我目前得到的错误:
在构造函数' RelayInfo :: RelayInfo(int,char *)': 17:错误:分配' char *'的不兼容类型到' char [20]'
自从我处理过C中的指针以来已经很长时间了。
//The RelayInfo class only has public fields and a constructor.
//Its only purpose is to hold these values.
class RelayInfo
{
public:
RelayInfo(int pin, char message[20]);
int Pin;
char Message[20];
};
RelayInfo::RelayInfo( int pin, char message[20] )
{
Pin = pin;
Message = message*;
}
void setup() {
pinMode(13, OUTPUT);
digitalWrite( 13, LOW );
}
void loop() {
//Construct an instance of the class:
RelayInfo info( 13, "Hello, World!" );
//Use the fields from the class.
if( info.Message == "Hello, World!" )
{
digitalWrite( info.Pin, HIGH );
}
}
答案 0 :(得分:1)
定义必须是:
RelayInfo( int pin, char* message );
甚至更好:
RelayInfo( int pin, const char* message );
编辑:
此外,您应该使用:
strncpy()
用于复制char指针。
答案 1 :(得分:0)
根据PDizzle745的建议,我想出了以下内容:
class RelayInfo
{
public:
RelayInfo(int pin, const char* message);
~RelayInfo();
int Pin;
char* Message;
};
RelayInfo::RelayInfo( int pin, const char* message )
{
Pin = pin;
//Allocate enough memory for copying the input string.
Message = (char*) malloc( strlen(message) * sizeof(char) + 1 );
//Copy the input string to the class's field.
strcpy( Message, message );
}
RelayInfo::~RelayInfo(void)
{
free( Message );
}
void setup() {
pinMode(13, OUTPUT);
digitalWrite( 13, HIGH );
delay(1000);
}
void loop() {
RelayInfo info( 13, "Hello" );
if( strcmp( info.Message, "Hello" ) == 0 )
{
digitalWrite( info.Pin, LOW );
}
}