1

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

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

这是我的代码:

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

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

4

3 回答 3

4
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;
  }
};
于 2013-05-04T12:26:51.100 回答
2

C++ 中的数组具有编译时固定大小。您不能有这样的声明,string name[];因为它使大小为空。除非您提供确定大小的初始化列表,否则您不能这样做。

此外,数组类型参数被转换为指针参数。所以你的string h_name[]论点实际上是一个string* h_name.

name[] = h_name[];

这条线没有多大意义。这几乎就像你试图访问元素name而不h_name给出索引。也许您打算将h_name数组分配给name数组,如下所示:

name = h_name;

然而,正如我们刚刚看到的,h_name实际上是一个指针。事实上,你无论如何都不能分配给一个数组,所以即使h_name是一个数组,这仍然行不通。

使用标准容器(如std::vector. 无论如何,您似乎都想要动态大小的数组,所以这会很容易。

于 2013-05-04T12:30:08.953 回答
0

即使选择了答案,我认为原始问题可能被误解了。

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

当你声明

string name[]; 

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

string name;

明星也是一样。

这将使代码

Class planet: public body
{
private:
  string name;
  string star;
public:
  void nameSetter (const string& h_name)
  {
      name = h_name;
  }
};
于 2013-05-04T13:48:51.040 回答