繁体   English   中英

如何为 C 风格的字符串数组编写 Getter 和 Setter?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM