C ++: конфликтует с предыдущим объявлением?

Я работаю над этим заданием и получаю сообщение об ошибке для явно объявленного ранее метода. Вот файл .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 не включается более одного раза. Я просто делаю глупую ошибку и не вижу ее? (Возможно дело). Спасибо за любую помощь!

4

Решение

Это потому, что у вас есть переменная-член также названный размер. Вы можете решить эту проблему, переименовав одну из них.

int size;
...
int size();
12

Другие решения

В С ++ есть своего рода объекты, которые можно вызывать. Когда вы вызываете DLList :: size (), это может привести к путанице, если переменная в вашем определении класса будет вызываться.
И это должно быть причиной того, что компилятор c ++ запрещает объявление функций и переменных с одинаковыми именами.

1

По вопросам рекламы [email protected]