所以我試圖編譯我的項目時,遇到下列編譯錯誤: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接口....
這篇文章的最後一行在語義上很明顯。 –
什麼是所有反斜槓? – NathanOliver
@NathanOliver反斜槓是不是在我添加它們的實際代碼中,因爲當我在代碼段中使用磅符號時,它在帖子預覽中顯示爲不同的字體,反斜槓未在預覽中顯示... stackoverflow noob here ... – AristosM