【问题标题】:Implementing dynamically created array of a class object (C++)实现类对象的动态创建数组(C++)
【发布时间】:2013-12-19 04:55:36
【问题描述】:

我的代码是这样的:

class cell{
 public:
 int v;
 int x[5];
}

cell **block; //initialized the size of the array as [5][5] in main

现在我真正想做的是,我想将一个整数数组中的值复制到上面这个类的每个对象的 v 成员中。喜欢:

int arr[5][5];

arr 具有整数值。我想这样复制。

for(int i=0; i<5;i++)
  for(int j=0;j<3;j++)*(*(block+i)+j).v=arr[i][j];

正如我的 IDE 所说,这肯定是不可能的。它说“;缺少声明”。并指向

*(*(block+i)+j).v=arr[i][j];

这也是我初始化块的方式。

  int V=5;
block = new cell*[V+1];
for(int x__=0; x__<=V; ++x__)
{
    for(int y__=0; y__<=V; ++y__)
    {
        block[x__][y__].v=0 ;
    }
}

谁能帮我实现这个目标?

【问题讨论】:

  • block[i][j].v = arr[i][j];
  • @godel9 那也没用。
  • 我现在确实为初始化语句编辑了我的帖子。 @godel9 基本上编译器遇到了我提到的错误。 "; 缺少语句"
  • “我正在开发矢量模板不可用的预标准版本。” - 我为你感到抱歉。真的。
  • 我也是。我也是。为了我自己!

标签: c++ arrays class object pointers


【解决方案1】:

你没有正确初始化block

int V=5;
block = new cell*[V];
for(int x = 0; x < V; ++x)
{
    block[x] = new cell;
    for(int y = 0; y < V; ++y)
    {
        block[x][y].v = 0;
    }
}

然后您可以使用以下方法复制二维数组:

for(int i = 0; i < V; ++i)
    for(int j = 0; j < V; ++j)
        block[i][j].v = arr[i][j];

另外,我建议您在 C++ 中查看 std::vector 的数组,并且您应该在构造函数中初始化 v 成员变量。

【讨论】:

  • 我正在开发矢量模板不可用的预标准版本。所以我不能使用它。我确实使用了一个构造函数来初始化它。好,我明白了。让我试试这个。
  • 如果您在构造函数中初始化v,则在创建cell ** 2D 数组时无需将v 设置为零。
  • 是的,我刚刚使用循环删除了该语句。
  • 好的。那只是问题所在。谢谢@godel9。
  • class cell(){..} 类名的有效声明吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-16
  • 1970-01-01
  • 2018-05-25
  • 2017-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多