使用头文件制作ADT:在类之外声明'int Queue :: size()'不是定义[-fpermissive]

时间:2015-11-10 19:48:44

标签: c++ oop

我已经通过Google和Stack Overflow进行了梳理,寻找这个问题的答案。我知道这是超级基本的,我真的很烦,我无法弄清楚出了什么问题。所以我的研究生教授希望我们为整数队列实现一个队列。为什么?因为这是"编程原理"而且我们基本上会用超简洁的定义来浏览一些细节。老实说,这是我曾经不得不采取的三小时课程中最大的浪费,但至少老师是好的。无论如何,我在.h文件中得到了类定义,其中包含

#ifndef QUEUE_H
#define QUEUE_H


class Queue
{
        private:
                std::vector<int> myQueue;
        public:
                int push(int);
                int pop_front();
                int size();
                bool empty();
};

#endif

那么,我觉得Queue :: size()和Queue :: empty被声明了吗?好吧,在我的queue.cpp文件中,我已经了解了这些函数的详细信息......

#include <vector>
#include "queue.h"

int Queue::push(int intToPush)
{
        myQueue.push_back(intToPush);
        return 0;
};

int Queue::pop_front()
{
        int front = myQueue.front();
        myQueue.erase(myQueue.begin());
        return front;
};
/*
int Queue::size(); <- It was these semicolons
{
        return myQueue.size();
};

bool Queue::empty(); <- This one too.
{
        return myQueue.empty();
};*/

当我像这样编译它时,它确实很好,但是当我包含我已经注释掉的那两个时,它会给出我在这篇文章标题中输入的错误。

我真的很抱歉这是如此基本和愚蠢,但我找不到任何可以帮助我的东西,让我感到困惑的是,这些函数导致编译器说他们被宣布为班级。我尝试使用泛型返回0和false,并获得相同的编译错误。

1 个答案:

答案 0 :(得分:1)

从cpp文件中的函数名末尾删除分号,然后再次尝试编译。您还可以删除所有函数定义的终止括号后面的分号。它们不是必需的。