C ++嵌套继承错误“{'标记之前的预期类名”

时间:2016-03-18 12:45:07

标签: c++ inheritance compiler-errors

因此,在尝试编译项目时出现以下编译错误:

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接口之前不会出现错误....

1 个答案:

答案 0 :(得分:0)

我认为你的#include“pascalToken.hpp”在pascalWordToken.hpp文件中不起作用。尝试用PascalToken类替换它;并将其包含在cpp文件中。