我在托管C++中只有初学者问题,这让我头疼。我正在创建一个元素列表,一个指针应该显示这个列表的当前元素。初始化一个静态指针导致<未定义的值>
问题是,当我将第一个元素分配给此列表时,我想用我的指针引用此列表的开头(“varPointer = & firstElem”)。但在此之后,指针根本没有任何价值。
这里是我的代码的简化版本:
ref class ElementClass
{
public:
value struct Element
{
//some items here ...;
Element *Next, *Previous;
};
...
}
ref class Queue
{
public:
static Element* queue;
static void AddElem(Element* elem) {
//Check, if queue is empty
if (queue == nullptr) {
queue = elem;
queue->Previous = nullptr;
}
else {
queue->Next = elem;
elem->Previous = queue;
queue = elem;
}
}
}
该计划不会引发任何错误,并在下一次迭代名单似乎仍然是空的。 即使我使用“静态元素*队列= 0”或队列指针始终具有的东西来显式初始化队列。与“元素”的一个实例,初始化是不可能的(“类型‘interior_ptr’的值不能被用于初始化类型的实体‘元素*’)在此,我加入:
...
public:
static Element^ tmpElem = gcnew Element();
static Element* queue = &tmpElem;
...
程序从未使用其他语句。 我明白任何形式的帮助,谢谢大家提前。
(我熟悉一般的编程,但我新的C++的方式。)
*但我是新来的C++ * - 我是这个“托管C++”的新手。你发布的肯定不是C++,至少是ANSI C++。 – PaulMcKenzie
'元素*接下来,*上一个;'具有非托管的指向可能被分配管理的数据的指针。小心混合托管指针和非托管指针。赔率是货物,这是编译器警告的。 – user4581301
in'void AddElem(Element elem)''elem'通过值传递。这会导致'elem'作为传入的临时副本,在退出函数时会被销毁。 'queue = &elem;'存储一个指向这个临时副本的指针,并在函数结束并且'elem'被销毁后指向无效内存。这里是龙。 – user4581301