因此,在尝试编译项目时出现以下编译错误:
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 :(得分:0)
我认为你的#include“pascalToken.hpp”在pascalWordToken.hpp文件中不起作用。尝试用PascalToken类替换它;并将其包含在cpp文件中。