【问题标题】:“ error: incompatible types in assignment of” when trying to resize array of pointers to objects尝试调整指向对象的指针数组的大小时出现“错误:分配中的类型不兼容”
【发布时间】:2020-02-21 03:05:58
【问题描述】:

我正在尝试调整这个指向对象的指针数组的大小。本质上,我正在尝试创建一个指向对象的新指针数组,其大小是原始指针的两倍,用原始指针填充新指针,然后让原始指针指向新指针。

似乎一切正常,直到我尝试将新的分配给旧的。

如果我只是复制到新的临时数组,它就会运行。如果我尝试将临时的分配给旧的,它会给我一个错误。

这就是我正在使用的:

正在处理这个,它是类文件的数据成员:

tiger *tigerDen[10];      //Tiger array

并像这样扩展它:

if (tigerIndexTracker + 1 > tigerDenSize)
{
    tigerDenSize = tigerDenSize * 2;
    tiger* temp[tigerDenSize];

    for (int count = 0; count < tigerIndexTracker; count++)
    {
        temp[count] = tigerDen[count];

    } 

    tigerDen = temp;

}

真的不知道需要做什么才能使这项工作正常进行。希望得到一些帮助。

我得到的确切错误(不确定是否可以理解):

错误:将 'tiger* [(((sizetype)(((ssizetype >((zoo*)this)->zoo::tigerDenSize) + -1)) + 1)]' 分配给 ' 时的类型不兼容老虎* [10]' TigerDen = 温度;

有一个箭头指向赋值运算符。

编辑:tigerDenSize 只是一个设置为 20 的 int。tigerIndexTracker 是一个设置为 10 的 int。基本上,我正在做的是试图感知一个对象是否即将添加到将接管它的数组中这是限制,如果是这样,创建一个我可以将所有内容移动到的新数组。

【问题讨论】:

  • 请提供minimal reproducible exampletigerDenSize 是编译时间常数吗?如果不是,您的代码依赖于非标准编译器扩展 (stackoverflow.com/questions/1887097/…)
  • @drescherjm tigerIndexTracker + 1 &gt; tigerDenSize 表明此代码的目的是使 tigerDen 更大。但是 C++ 不是这样工作的。你不能让tigerDen 更大。
  • tigerDen = temp; 不起作用。而tiger* temp[tigerDenSize]; 是一个局部变量。
  • 我正在尝试调整这个指向对象的指针数组的大小。您无法调整 c++ 中的数组大小,它是固定的编译时的大小。如果不允许使用std::vector,则必须动态分配内存。
  • @WaresEngineer tiger* temp[tigerDenSize]; 是一个指针数组,而 tiger* temp = new tiger[tigerDenSize]; 是一个 tigers 数组。我猜这个错误是因为tiger没有默认构造函数?

标签: c++ arrays object pointers


【解决方案1】:

好的,这是你的代码:

if (tigerIndexTracker + 1 > tigerDenSize)
{
    tigerDenSize = tigerDenSize * 2;
    tiger* temp[tigerDenSize];

    for (int count = 0; count < tigerIndexTracker; count++)
    {
        temp[count] = tigerDen[count];
    } 
    tigerDen = temp;
}

发生的情况是,您在堆栈上创建新的临时数组,将内容复制到其中,然后当您的 if 语句结束时,该内存将被重用。呸!

正确的做法:

   tiger * temp = new tiger*[tigerDenSize];

   ... copy like you already do

   delete [] tigerDen;  // This frees the original array
   tigerDen = temp;

另外,在你的标题中你需要改变你的指针:

   tiger ** tigerDen = nullptr;

请注意,tigerDenSize 应在开始时分配为 0。或者你可以预先分配一些空间。

【讨论】:

  • @JosephLarson 哇,非常感谢您花时间帮助我!如果我可以再问你一件事,如果我在整个代码中都在做这样的事情:cout &lt;&lt; "Tiger is age: " &lt;&lt; tigerDen[pregnancyCounter]-&gt;getAge() &lt;&lt; endl;,并且我使用的是tigerDen,我是否需要像这样使用tigerDen 完成并更改所有内容?我还在学习指针:(
  • cout &lt;&lt; "Tiger is age: " &lt;&lt; tigerDen[pregnancyCounter]-&gt;getAge() &lt;&lt; endl; 将保持不变。
猜你喜欢
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2020-10-11
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多