使用 Eclipse CDT,我编写了一个抽象类“Lexer”,它驻留在共享库项目中。它由另一个共享库项目中的“UTF8Lexer”继承。为此,我创建了一个 UnitTest++ 测试项目,其中包含以下代码:
#include "UnitTest++.h"
#include "UTF8Lexer.h"
#include <fstream>
using namespace std;
programma::Lexer<UChar32, icu::UnicodeString>* getLexer(string sampleFile)
{
string path = "../samples/" + sampleFile;
ifstream* stream = new ifstream();
stream->open (path.data());
programma::UTF8Lexer l1(stream); //This line compiles fine.
programma::UTF8Lexer* l2 = new programma::UTF8Lexer(stream); // Error: "Type 'programma::UTF8Lexer' could not be resolved"
return l2;
}
我不明白为什么他喜欢 l1 的声明,但不喜欢 l2 的声明......通常不具体的错误消息并没有给我太多线索(虽然我是 C++ 新手,但我工作了很多使用 C# 并在我大学的计算机科学课程中用 C 语言做了一些事情......)。我认为它不能是任何缺失的引用或包含,因为它实际上处理 l1 声明......但是如果我在同一个源文件中创建一些其他类并以相同的方式实例化它,一切正常......
我使用本教程将库连接到他们使用的项目,所以这应该没问题。
我也为此搜索了很多,但事实证明,要么不可能找到这个问题的特定搜索词,要么我发现了某种特殊情况......
以下是上述课程的一些摘录:
UTF8Lexer.h:
#ifndef UTF8LEXER_H_ #define UTF8LEXER_H_ #include "unicode/unistr.h" #include "Lexer.h" #include <iostream> using namespace icu; namespace programma { class UTF8Lexer : public Lexer<UChar32, UnicodeString> { public: UTF8Lexer(std::istream* source); ~UTF8Lexer(); ...
UTF8Lexer.cpp:
#include "UTF8Lexer.h" namespace programma { programma::UTF8Lexer::UTF8Lexer(std::istream* source) { } programma::UTF8Lexer::~UTF8Lexer() { } ...
词法分析器.h:
#ifndef LEXER_H_ #define LEXER_H_ #include "Token.h" namespace programma { template<typename C, typename S> class Lexer { public: ...