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

时间:2013-05-04 12:23:34

标签: c++ arrays setter getter getter-setter

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

在']'标记

之前的预期主要表达

这是我的代码:

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

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

3 个答案:

答案 0 :(得分:3)

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;
  }
};

答案 1 :(得分:2)

C ++中的数组具有编译时固定大小。您不能拥有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这样的标准容器会好得多。看起来你想要动态大小的数组,所以这将使这变得容易。

答案 2 :(得分:0)

即使选择了答案,我想也许原来的问题可能会被误解。

我认为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;
  }
};