我在c ++中编写一个类,但是我不确定如何为数组创建setter和getter(抱歉这是一个基本问题!)我收到以下错误:
在']'标记
之前的预期主要表达这是我的代码:
Class planet: public body
{
private:
string name[];
string star[];
public:
void nameSetter (string h_name[])
{
name[] = h_name[];
}
};
我再次为这个愚蠢的问题感到抱歉,我知道我没有通过索引,但是,当我创建索引时,它会引发大量错误!
答案 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[];
这条线没有多大意义。这几乎就像你试图访问name
和h_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;
}
};