2015-11-10 23 views
0

我已經梳理了谷歌和堆棧溢出,尋找這個問題的答案。我知道這是超級基本的,我真的很惱火,我無法弄清楚什麼是錯的。所以我的研究生教授希望我們爲整數實現一個隊列。爲什麼?因爲這是「程序設計原理」,所以我們基本上都會通過超級簡明的定義來檢查單個細節。老實說,這是我必須接受的三個小時課程中最大的浪費,但至少老師是好的。不管怎麼說,我有在.h文件中的類定義,其中包含使用頭文件來創建一個ADT:類之外的'int Queue :: size()'的聲明不是定義[-fpermissive]

#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.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,並得到相同的編譯錯誤。

+0

作爲一般規則,它有助於在有關編譯錯誤的問題中包含編譯錯誤。 –

+0

我會的,我已經將它包含在帖子的標題中,所以我不想成爲多餘的。 編輯:如果有人試圖谷歌編譯錯誤,這種方式更可能出現在谷歌所以也許他們也可以得到幫助呢? –

回答

1

從cpp文件中的函數名稱末尾除去分號,然後再次嘗試編譯。您也可以刪除所有函數定義的終止括號後面的分號。他們沒有必要。

+0

欣賞它的男人!我被告知,你總是應該按照慣例在函數定義之後加分號,儘管它不是編譯器所要求的,並且把while循環,for循環,if語句等當作函數來處理,所以我的代碼通常用分號填滿。 –

+0

如果我沒有記錯的話,一些強制執行嚴格的ANSI符合性的編譯模式(例如--pedantic)實際上會拒絕代碼,其中有分號結尾的關閉功能括號。儘管如此,我不知道在實踐中多久會使用這種模式。 –

相關問題