2016-03-18 65 views
1

所以我試圖編譯我的項目時,遇到下列編譯錯誤:C++嵌套繼承錯誤「之前的預期類名‘{’令牌」

g++ -Wall -c --std=c++11 source.cpp token.cpp 
g++ -Wall -c --std=c++11 pascalToken.cpp 
pascalWordToken.hpp:7:1: error: expected class-name before ‘{’ token 
g++ -Wall -c --std=c++11 pascalWordToken.cpp 
pascalWordToken.hpp:7:1: error: expected class-name before ‘{’ token` 

下面的代碼已被截斷,以保持出任儘可能小,我希望所有相關部分都存在。

token.hpp基類的接口

#ifndef TOKEN_HPP 
#define TOKEN_HPP 

#include "source.hpp" 

class Token { 
public: 
    Token(Source& source_ref); 
    // public getter methods 

protected: 
    // protected member variables 
    void extract(); 
    // more code ... 
}; 

#endif // TOKEN_HPP 

token.cpp基類源

#include "token.hpp" 

Token::Token(Source& source_ref) 
{ 
    // initialization of some member variables 
    extract(); 
} 

void Token::extract() 
{ 
    // some code 
} 

pascalToken.hpp文件

#ifndef PASCAL_TOKEN_HPP 
#define PASCAL_TOKEN_HPP 

#include "token.hpp" 
#include "source.hpp" 

class PascalToken : public Token 
{ 
protected: 
    PascalToken(Source& source_ref); 
}; 

#endif // PASCAL_TOKEN_HPP 

pascalToken.cpp文件

#include "pascalToken.hpp" 

PascalToken::PascalToken(Source& source_ref) : Token(source_ref) {} 

pascalWordToken.hpp文件

#ifndef PASCAL_WORD_TOKEN_HPP 
#define PASCAL_WORD_TOKEN_HPP 

#include "token.hpp" 
#include "pascalToken.hpp" 
#include "source.hpp" 

class PascalWordToken : public PascalToken 
{ 
public: 
    PascalWordToken(Source& source_ref); 

protected: 
    void extract(); 
}; 

#endif // PASCAL_WORD_TOKEN_HPP` 

pascalWordToken.cpp文件

#include "pascalWordToken.hpp" 
PascalWordToken::PascalWordToken(Source& source_ref) : PascalToken(source_ref) 
{} 

void PascalWordToken::extract() 
{ 
    // code ... 
} 

編輯:

source.hpp文件

#ifndef SOURCE_HPP 
#define SOURCE_HPP 

#include <fstream> 

#ifndef EOF 
#define EOF '\0' // end-of-file 
#endif 
#define EOL '\n' // end-of-line 

class Source { 
public: 
    Source(std::ifstream& reader_ref); 

    // some code .... 

private: 
    std::ifstream& m_reader_ref; 
    // some private member variables/methods 

protected: 
    // some protected member variables 
}; 

#endif // SOURCE_HPP 

source.cpp文件

#include "source.hpp" 

#include <execinfo.h> 
#include <unistd.h> 

Source::Source(std::ifstream& reader_ref) : m_reader_ref(reader_ref) {} 

注意,代碼一直嚴重截斷,並有項目更多的文件,但他們都編譯罰款和不出現錯誤,直到我包括pascalWordToken接口....

+0

這篇文章的最後一行在語義上很明顯。 –

+3

什麼是所有反斜槓? – NathanOliver

+0

@NathanOliver反斜槓是不是在我添加它們的實際代碼中,因爲當我在代碼段中使用磅符號時,它在帖子預覽中顯示爲不同的字體,反斜槓未在預覽中顯示... stackoverflow noob here ... – AristosM

回答

0

我假設您的#include「pascalToken.hpp」在pascalWordToken.hpp文件中不起作用。嘗試用類PascalToken替換它;並將其包含在cpp文件中。

+0

當我這樣做時,出現以下錯誤:'pascalWordToken.hpp:8:32:error:invalid use of incomplete type'class PascalToken'' – AristosM

相關問題