C++:与先前声明冲突?

6

我可以帮您进行翻译。以下是需要翻译的内容:

我正在处理这个任务,但是一直遇到一个错误,提示之前已经声明了该方法。这是.h文件:

#ifndef DLLIST_H
#define DLLIST_H

#include <iostream>
#include <fstream>
#include <cstddef>
#include "DListNode.h"

typedef int ItemType;

class DLList
{
private:
  friend std::ostream & operator<< (std::ostream & out, DLList & other);
  int size;
  int * head;
  int * tail;

  void _copy(const DLList * toCopy);
  void _dealloc();

public:
  DLList();
  DLList(const DLList & toCopy);

  ~DLList();

  DLList & operator=(const DLList & toCopy);

  int size();
  void append(ItemType item);
  void insert(int index, ItemType item);
  ItemType pop(int index);
  ItemType pop();
  const DListNode & operator[] (int idx);

};

std::ostream & operator<< (std::ostream & out, const DLList & d);

#endif

错误在int size();处被触发,显示它与先前的声明冲突。我知道这通常是因为我多次包含了此头文件,但我就是找不到它发生的地方。以下是项目中所有文件的包含语句:
#include "DLList.h" // DLList.cpp
=======================================
#include "DListNode.h" // DListNode.cpp
=======================================
#include <iostream> // DListNode.h
#include <fstream>
#include <cstddef>
=======================================
#include "DLList.h" // This is the main test file
#include "DListNode.h"
#include <iostream>

我可以看到DListNode.h被包含了两次,但是DLList.h没有被包含超过一次。我是否犯了一个愚蠢的错误而没有注意到呢?(很可能是这样)。感谢任何帮助!
2个回答

17

这是因为您有一个名为size的成员变量,您可以通过将它们中的一个重命名来解决此问题。

int size;
...
int size();

1
在C++中有一种可调用的对象。如果您在类定义中的变量是可调用的,则调用DLList::size()可能会令人困惑。这应该是C++编译器禁止使用相同名称声明函数和变量的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接