繁体   English   中英

如何为数组编写setter和getter? (C ++)

[英]How do I write setters and getters for an array? (c++)

我在c ++中编写一个类,但是我不确定如何为数组创建setter和getter(很抱歉,这是一个基本问题!),我收到以下错误:

']'标记之前的预期主表达式

这是我的代码:

Class planet: public body
{
private:
  string name[];
  string star[];
public:
  void nameSetter (string h_name[])
  {
      name[] = h_name[];
  }
};

对于这个愚蠢的问题,我再次感到抱歉,我知道我没有传递索引,但是,当我创建索引时,它会引发大量错误!

string name[];

这不是数组,而是一个指针。 使用vectors代替:

#include <vector>
class planet: public body
{
private:
  vector<string> name;
  vector<string> star;
public:
  void nameSetter (const vector<string> &h_name)
  {
      name = h_name;
  }
};

C ++中的数组具有编译时固定的大小。 您不能有像string name[];这样的声明string name[]; 因为它使尺寸为空。 除非您提供确定大小的初始化列表,否则您将无法执行此操作。

另外,数组类型参数被转换为指针参数。 因此,您的string h_name[]参数实际上是一个string* h_name

name[] = h_name[];

这行没有多大意义。 就像您要尝试在不提供索引的情况下访问nameh_name元素一样。 也许您打算将h_name数组分配给name数组,如下所示:

name = h_name;

但是,正如我们刚刚看到的, h_name实际上是一个指针。 实际上,您无论如何都无法分配给数组,因此即使h_name是数组,这仍然行不通。

使用标准容器(如std::vector会更好。 看来您还是想要动态调整大小的数组,因此这将使此操作变得容易。

即使选择了答案,我认为原始的问题也许被误解了。

我认为OP的意图是,每个行星实例应有1个名称和1个恒星; 因此,他在代码中使用的数组表示法对数组和字符串有误解。 基于此假设,我将继续。

当你声明

string name[]; 

我相信您只想保留1个行星的名称,在这种情况下,您不需要数组,而只需要一个字符串。

string name;

明星也是如此。

这将使代码

Class planet: public body
{
private:
  string name;
  string star;
public:
  void nameSetter (const string& h_name)
  {
      name = h_name;
  }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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