C++嵌套继承错误"expected class-name before ‘{’ token"

C++ nested inheritance error "expected class-name before ‘{’ token"

本文关键字:token before expected 嵌套 继承 错误 C++ class-name      更新时间:2023-10-16

所以我在尝试编译我的项目时收到以下编译错误:

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`

以下代码已被截断以保持帖子尽可能小,我希望所有相关部分都存在。

令牌.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

令牌.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 ...
}

编辑:

源.hpp 文件

#ifndef SOURCE_HPP
#define SOURCE_HPP
#include <fstream>
#ifndef EOF
#define EOF ''    // 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

源.cpp文件

#include "source.hpp"
#include <execinfo.h>
#include <unistd.h>
Source::Source(std::ifstream& reader_ref) : m_reader_ref(reader_ref) {}

请注意,代码已被严重截断,项目中还有更多文件,但它们都可以很好地编译,直到我包含 pascalWordToken 接口才出现错误。

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

相关文章: