返回指针未定义,即使它应该是

时间:2015-05-30 03:01:49

标签: c++ pointers return undefined

我有类似的东西。为什么lastItem未定义?

Menu*   CreateItem() 
{
    Menu* menuPointer = new Menu;   
    //initialize values     
    return menuPointer; 
}

void AnotherFunction() 
{
    Menu* lastItem = CreateItem();
}

非常感谢!

编辑:

我只是想出来了,但我不明白为什么那不起作用。更完整的上下文看起来像这样

Menu*   Content::CreateItem() 
{
    Menu* menuPointer = new Menu;   
    //initialize values     
    return menuPointer; 
}

void Content::CreateObject(Menu* curItem, Menu* lastItem)
{
     lastItem = CreateItem();
     curItem = lastItem;
}

void Content::Initialize()
{
    Menu*   curItem = 0;
    Menu*   lastItem = 0;
while (...)
{
    if (/*object is complete*/)
    {
        CreateObject(curItem, lastItem);
    }
    //create object little by little
}

}

我改变了

Menu*   curItem = 0;
Menu*   lastItem = 0;

Menu*   curItem = new Menu;
Menu*   lastItem = new Menu;

为什么这有必要?

2 个答案:

答案 0 :(得分:0)

实际上,我做过的事情似乎才有效。最后,我要做的就是改变这个

void Content::CreateObject(Menu* curItem, Menu* lastItem);

void Content::CreateObject(Menu*& curItem, Menu*& lastItem);

答案 1 :(得分:0)

您的问题是将参数传递给C ++中的函数默认为按值。

这样做的结果是对参数值的更改是函数的本地值。

因此,根据您编辑的代码

$('#parallel_test').change(function(){
    if( $(this).val()=="Insert"){
        $("#insert_test").show()
    }
    else{
        $("#insert_test").hide()
    }
});

Menu* Content::CreateItem() { Menu* menuPointer = new Menu; //initialize values return menuPointer; } void Content::CreateObject(Menu* curItem, Menu* lastItem) { lastItem = CreateItem(); curItem = lastItem; } 功能没问题。 CreateItem()的值将返回给调用者。

但是,menuPointercurItem的更改有所不同。来电时,来电者

CreateObject()

传递Content::CreateObject(someItem, someOtherItem); someItem值的副本。函数内的更改会更改副本的值,而不会更改调用者看到的变量someOtherItemsomeItem

一种可能的解决方案是将指针传递给指针。

someOtherItem

请注意上面的附加星号。这样做的原因是,尽管调用者看不到指针值的变化,但是调用者可以看到指针所指向的内容(如果你喜欢,指针对象)的变化。

正如您在自己的回复中已经注意到的,另一种解决方案是传递对指针的引用。

void Content::CreateObject(Menu **curItem, Menu **lastItem)
{
     *lastItem = CreateItem();
     *curItem = *lastItem;
}

你需要更好地阅读你的教科书,因为C ++上的所有基础教科书都以这种或那种方式描述了这一点。