我有类似的东西。为什么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;
为什么这有必要?
答案 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()
的值将返回给调用者。
但是,menuPointer
中curItem
的更改有所不同。来电时,来电者
CreateObject()
传递Content::CreateObject(someItem, someOtherItem);
和someItem
值的副本。函数内的更改会更改副本的值,而不会更改调用者看到的变量someOtherItem
和someItem
。
一种可能的解决方案是将指针传递给指针。
someOtherItem
请注意上面的附加星号。这样做的原因是,尽管调用者看不到指针值的变化,但是调用者可以看到指针所指向的内容(如果你喜欢,指针对象)的变化。
正如您在自己的回复中已经注意到的,另一种解决方案是传递对指针的引用。
void Content::CreateObject(Menu **curItem, Menu **lastItem)
{
*lastItem = CreateItem();
*curItem = *lastItem;
}
你需要更好地阅读你的教科书,因为C ++上的所有基础教科书都以这种或那种方式描述了这一点。