C ++:与之前的声明冲突?

时间:2012-12-04 01:29:32

标签: c++ declaration conflict

我正在进行这项任务,并且我一直在为一个明显先前声明的方法收到错误。这是.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语句:

#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 个答案:

答案 0 :(得分:12)

这是因为您有成员变量,也称为尺寸。您可以通过重命名其中一个来解决此问题。

int size;
...
int size();

答案 1 :(得分:1)

c ++中有一种可调用的对象。如果类定义中的变量是可调用的,那么在调用DLList :: size()时会很混乱。 这应该是c ++编译器禁止声明函数和变量同名的原因。