无效的纯说明符

Invalid Pure Specifier

本文关键字:说明符 无效      更新时间:2023-10-16

我目前正在做一个任务,要求我们创建一个链表。 这要求我们创建指向节点的指针。这些节点包含值以及指向上一个和下一个节点的指针。这样,我们可以轻松浏览列表并动态分配内存。 我需要提交作业的平台(ZyBooks(有一个名为"leaker.h"的类,它可以检测任何泄漏的内存。我现在无法提交我的作品,因为我收到这个奇怪的错误:

在 LinkedList.h:4:0 包含的文件中, 从主.cpp:5: leaker.h:95:28:错误:在"="标记之前无效的纯说明符(只允许"= 0"( #define 删除_leaker_file=文件,_leaker_func=函数

每当我调用我的构造函数(其中任何一个(和一个名为 Clear(( 的函数时,都会出现错误。

LinkedList()
{
nodeCount = 0;
headPtr = nullptr;
tailPtr = nullptr;
}
//Copy Constructor
LinkedList(const LinkedList<T>& list)
{
nodeCount = list.nodeCount;
headPtr = new Node(list.headPtr->data);
Node* tempNode = list.headPtr->next;
Node* outNode = headPtr->next;
Node* prevNode = headPtr;
while (tempNode != nullptr)
{ 
outNode = new Node(tempNode->data);
prevNode->next = outNode;
outNode->prev = prevNode;
tempNode = tempNode->next;
outNode = outNode->next;
prevNode = prevNode->next;
}
tailPtr = prevNode;
tailPtr->prev = prevNode->prev;
}
//Brackets Operator
T& operator[](unsigned int index)
{
try {
if (index < 0 || index >= nodeCount) throw 1;
}
catch (int e) {
cout << "Error: Index Out of Range"<< endl;
}
Node* tempNode = headPtr;
unsigned int i = 0;
while (tempNode != nullptr)
{
if (i == index) return tempNode->data;
i++;
tempNode = tempNode->next;
}   
return tempNode->data;
}
//== Operator
bool operator==(const LinkedList<T>& rhs) const
{
if (nodeCount != rhs.nodeCount) return false;
Node* tempNode = headPtr;
Node* otherNode = rhs.headPtr;
while (tempNode != nullptr)
{
if (tempNode->data != otherNode->data) return false;
tempNode = tempNode->next;
otherNode = otherNode->next;
}
return true;
}
//= Operator
LinkedList<T>& operator=(const LinkedList<T>& rhs)
{
Node* tempNode = rhs.headPtr;
for (unsigned int i = 0; i < rhs.nodeCount; i++)
{
AddTail(tempNode->data);
tempNode = tempNode->next;
}
return *this;
}
//Destructor
~LinkedList()
{
Node* tempNode = headPtr->next;
Node* prevNode = headPtr;
while(prevNode != nullptr)
{
delete prevNode;
prevNode = tempNode;
tempNode = tempNode->next;
}
delete prevNode;
delete tempNode;
}

很抱歉代码太多。我不知道错误来自哪里,所以我认为我最好粘贴链接到错误的所有代码。

问题不在于这里的函数。某处(#define delete _leaker_file=FILE, _leaker_func=func(有一些宏破坏了东西。

错误来自leaker.h:95:28(leaker.h,第 95 行,第 28 列(。我猜你在那里有一个已删除的功能:

leaker(const leaker&) = delete;

将被翻译成:

leaker(const leaker&) = _leaker_file=FILE, _leaker_func=func;

编译器不知道如何进行。

如果这是您的宏,请立即从代码中删除它。它总是会给你带来悲哀和痛苦。

如果它是从任何其他文件导入的,请不要#include该文件,您应该真正重新考虑使用该库 - 如果它使用此类机制,它就不是一个好的库 - 使用宏覆盖关键字是未定义的行为。

如果找不到此宏,请尝试注释掉标头中的每个#include,直到问题消失。您可以注释掉当前的类并制作一些虚拟类来专注于问题:

//#include <vector>
#include <...>
class A {
A() = delete;
};
//class leaker {
//...
//};