错误:宏名称必须是标识符

时间:2012-12-10 00:19:55

标签: c++ macros

我在以下代码中不断收到错误“宏名称必须是标识符”,我不知道为什么。据我所知,我没有违反任何命名标准。这是我的“dllist.h”文件:

#ifndef _DOUBLY_LINKED_LIST_
#define _DOUBLY_LINKED_LIST_

template <class T>
class IntDLLNode {

friend class IntDLList;
 
    public:

        IntDLLNode() {next = prev = NULL;}

        IntDLLNode(const T& el, IntDLLNode *n = NULL, IntDLLNode *p = NULL) {
        info = el;
        next = n;
        prev = p;
        }

protected:

        T info;
        IntDLLNode<T> *next, *prev;
};

template <class T>
class IntDLList {

    public:

    IntDLList() {head = tail = NULL;}

    void addToDLLTail(const T& el);
    void addToDLLHead(const T& el);
    T deleteFromDLLTail();
    T deleteFromDLLHead();
    void deleteNode(int);
    void isInList(int) const;
    void addSorted(int);
    void printList();

private:

    IntDLLNode<T> *head, *tail;
};

#endif 

我也尝试过像DOUBLY_LINKED_LIST和DOUBLYLINKEDLIST这样的名字 - 都会导致同样的错误。

2 个答案:

答案 0 :(得分:2)

您违反了规则。 _DOUBLY_LINKED_LIST_是无效的标识符。任何以下划线开头,后面紧跟大写字符的内容都是为实现保留的。

尝试DOUBLY_LINKED_LIST

还尝试#include <cstddef> NULL。或者使用0。或者更好的是,如果你有C ++ 11支持,请使用std::nullptr

答案 1 :(得分:0)

尝试

 #if !defined( _DOUBLY_LINKED_LIST_)

而不是

#ifdef _DOUBLY_LINKED_LIST_