[英]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[];
这行没有多大意义。 就像您要尝试在不提供索引的情况下访问name
和h_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.