gpt4 book ai didi

c++ - "expected unqualified-id"上的 "using"编译失败

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:25 30 4
gpt4 key购买 nike

我需要一些帮助来制作这个类(class)程序。我们正在使用 g++(linux?它是通过服务器上的 putty)我对这个链表有很多问题。它给我的当前错误是

queue.cpp:2: error: expected unqualified-id before âusingâ

想知道是否有人可以帮我解决这个问题。一点点搜索表明问题似乎出在#define 的某个地方?错误显示它在 .cpp 文件中,但我认为它在 .h 文件中。另外,如果你能给我任何关于任何看起来不对劲、错误的编程建议,或者是否有更好的方法。

下面的queue.h文件

#ifndef QUEUE_H
#define QUEUE_H

template <class Object>
class Queue
{
public:
Queue();
Queue(const Queue& a_queue);
Queue& operator =(const Queue& rhs);
bool enqueue(const Object& d);
bool dequeue(const Object& d);
bool isEmpty() const;
~Queue();

private:
struct ListNode
{
Object obj;
ListNode *next;

};
ListNode *head;
}

#endif //Queue_H
#include "queue.cpp" //include queue.cpp with file

这里是queue.cpp文件。

#include <iostream>
using namespace std;
template <class Object>
Queue<Object>::Queue()
{
head = NULL;
}

template <class Object>
Queue<Object>::Queue(const Queue<Object>& a_queue)
{
head=NULL;
*this=a_queue;
}

template <class Object>
Queue<Object>& Queue<Object>::operator =(const Queue<Object> &rhs)
{
ListNode *nodePtr;
nodePtr = rhs.head;
if(this != rhs){
this.head = NULL;
while(nodePtr != NULL){
this.enqueue(nodePtr->obj);
nodePtr = nodePtr->next;
}
}
}

template <class Object>
bool Queue<Object>::enqueue (const Object& d) //Enqueue
{
ListNode *newNode;
ListNode *nodePtr;
ListNode *previousNode;
previousNode = NULL;
nodePtr = NULL;
newNode = new ListNode;
newNode->obj = d;
newNode->next = NULL;

if(isEmpty){
head = newNode;
return true;
}
else{
nodePtr = head;
previousNode = NULL;
while(nodePtr != NULL){
previousNode = nodePtr;
nodePtr=nodePtr->next;
}
if(previousNode->next == NULL){
previousNode->next = newNode;
return true;
}
else
return false;
}
}

template <class Object>
bool Queue<Object>::dequeue (const Object& d) //Dequeue
{
ListNode *nodePtr;

if(!head)
return false;
else{
if(head->next != NULL){
nodePtr = head;
d=nodePtr->obj;
head = head->next;
delete nodePtr;
}else
delete head;
return true;
}
}

template <class Object>
bool Queue<Object>::isEmpty() const //Check if Empty
{
if(!head)
return true;
else
return false;
}

template <class Object>
Queue<Object>::~Queue() //Destructor
{
Object temp;
while (head != NULL)
dequeue (temp);
}

最佳答案

  1. 不要在标题中包含您的实现文件。包括实现文件中的 header 。
  2. 我没有看到您在代码的 header 中说“使用 namespace 标准”,但您在评论中说您这样做了。不。永远不要在头文件中说using namespace
  3. 将所有模板定义放在标题中。
  4. 您在 header 中的类定义中缺少分号。
  5. 您的赋值运算符不是异常安全的。确保您的复制构造函数是正确的,然后使用 copy-and-swap 习惯用法。
  6. 您的复制构造函数不正确。如果你想支持惰性复制(写时复制)那很好,但你错过了实际的深度复制操作。对复制构造函数要格外小心,因为正确使用它非常重要。

关于c++ - "expected unqualified-id"上的 "using"编译失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5574732/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com