【发布时间】:2011-02-09 01:57:08
【问题描述】:
我刚开始学习C++(来自Java)并且在做任何事情时都遇到了一些严重的问题:P 目前,我正在尝试制作一个链接列表,但一定是在做一些愚蠢的事情,因为我不断得到“ void 值没有被忽略,因为它应该是”编译错误(我已经将它标记在下面抛出它的位置)。如果有人可以帮助我解决我做错的事情,我将非常感激:)
另外,我不习惯在一般情况下选择通过引用、地址或值传递以及内存管理(目前我的所有节点和数据都声明在堆上)。 如果有人对我有任何一般性建议,我也不会抱怨:P
来自 LinkedListNode.cpp
的关键代码LinkedListNode::LinkedListNode()
{
//set next and prev to null
pData=0; //data needs to be a pointer so we can set it to null for
//for the tail and head.
pNext=0;
pPrev=0;
}
/*
* Sets the 'next' pointer to the memory address of the inputed reference.
*/
void LinkedListNode::SetNext(LinkedListNode& _next)
{
pNext=&_next;
}
/*
* Sets the 'prev' pointer to the memory address of the inputed reference.
*/
void LinkedListNode::SetPrev(LinkedListNode& _prev)
{
pPrev=&_prev;
}
//rest of class
来自 LinkedList.cpp 的关键代码
#include "LinkedList.h"
LinkedList::LinkedList()
{
// Set head and tail of linked list.
pHead = new LinkedListNode();
pTail = new LinkedListNode();
/*
* THIS IS WHERE THE ERRORS ARE.
*/
*pHead->SetNext(*pTail);
*pTail->SetPrev(*pHead);
}
//rest of class
【问题讨论】:
-
我强烈反对获取参考地址。相反,只需传递指针。这样调用者就知道您正在保存地址,并且不太可能传入局部变量。
-
@Ben:请耐心等待,我正试图弄清楚这一切。所以我假设你在谈论 SetNext 和 SetPrev 函数?最终用户不应该访问它们,他们应该只能访问,比如说,添加和删除方法,然后它们会调用它们。话虽如此,在这种情况下通过地址传递是否仍然更有意义?我原来的传递函数是,通过使用 const,我们将无法更改那里的数据,只能使用它(在这种情况下获取地址)。但是,我的思绪在想方设法理解这一切,所以欢迎提供帮助!
-
是的,我说的正是 SetNext 和 SetPrev。我永远不会让通过引用传递的参数超过被调用函数的持续时间。调用者甚至可能不知道正在获取引用。对于私有函数,您所做的可能是“安全的”,但这不是好的做法,并且会损害可维护性。
-
请拿起一本初学者的 C++ 书籍 (stackoverflow.com/questions/388242/…)。要正确学习 C++,请假装您从未学习过 Java。 C++ 与 Java 完全不同。
标签: java c++ pointers linked-list parameter-passing