[英]How to Write Getters and Setters for C-Style String Array?
我不允许使用std::string
,并且需要使用C-Style
字符串数组。
我正在处理字符串数组的 Getter 和 Setter,但遇到以下错误:
错误:void Unit::SetName(const char*, unsigned int) 的原型与“Unit”类中的任何内容都不匹配
错误:候选是:void Unit::SetName(const char**, unsigned int)
下面是我的代码片段。
#ifndef UNIT_H
#define UNIT_H
#include <iostream>
#include <string.h>
using namespace std;
const unsigned UnitNameSize = 10;
class Unit {
public:
Unit();
Unit( const char * nam, unsigned cred );
const char* GetName() const;
void SetName( const char *nam[], unsigned UnitNameSize);
friend ostream & operator <<( ostream & os, const Unit & U );
friend istream & operator >>( istream & input, Unit & U );
private:
char name[UnitNameSize];
int credits;
};
inline const char* Unit::GetName() const{
return name;
}
//error-ed set method
inline void Unit::SetName( const char* nam , unsigned namSize){
name[] = nam[namSize];
}
#endif
由于您班级中名称的长度是固定长度,因此执行此操作的最简单方法是std::strncpy
。 这将按如下方式工作:
inline void Unit::SetName (char const * name) {
std::strncpy(this->name, name, UnitNameSize);
// Ensure name member ends in null-terminator,
// even if new name length is >= UnitNameSize.
this->name[UnitNameSize - 1] = 0;
}
错误消息指出 SetName 的声明和定义的签名不匹配的事实。 在一个中,您期望指向另一个 ac 字符串中的 c 字符串的指针。 此外,您的 SetName 函数是错误的,它会尝试通过参数字符串的末尾访问字符。 为什么不能使用 std::string?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.