This question is unlikely to help any future visitors; it is only relevant to a small geographic area, a specific moment in time, or an extraordinarily narrow situation that is not generally applicable to the worldwide audience of the internet. For help making this question more broadly applicable, visit the help center。
6年前关闭。
使用Eclipse CDT,我编写了一个抽象类'Lexer',该类位于共享库项目中。它由另一个共享库项目中的“ UTF8Lexer”继承。为此,我创建了一个UnitTest ++测试项目,其中包含以下代码:
我不明白为什么他喜欢l1的声明,却不喜欢l2的声明。通常不具体的错误消息并不能给我太多线索(尽管我是C ++的新手,但我已经做了很多工作我在大学的计算机科学课程中使用C#并用C做了一些事情...)。我认为它不能缺少任何引用或包含内容,因为它实际上处理了l1声明...但是,如果我在同一源文件中创建其他一些类并以相同的方式实例化它,则一切正常。
我使用this tutorial将库连接到正在使用的项目,所以应该没问题。
我对此也进行了很多搜索,但事实证明,要么无法找到针对此问题的特定搜索字词,要么我已经找到某种特殊情况……
以下是上述类的一些摘录:
UTF8Lexer.h:
UTF8Lexer.cpp:
Lexer.h:
6年前关闭。
使用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声明...但是,如果我在同一源文件中创建其他一些类并以相同的方式实例化它,则一切正常。
我使用this tutorial将库连接到正在使用的项目,所以应该没问题。
我对此也进行了很多搜索,但事实证明,要么无法找到针对此问题的特定搜索字词,要么我已经找到某种特殊情况……
以下是上述类的一些摘录:
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() {
}
...
Lexer.h:
#ifndef LEXER_H_
#define LEXER_H_
#include "Token.h"
namespace programma {
template<typename C, typename S> class Lexer {
public:
...
最佳答案
programma::UTF8Lexer l1(stream);
可能被解析为programma::UTF8Lexer l1(std::stream __Unnamed_Argument);
,即名为l1
的函数的声明。删除using namespace std::
可以解决此问题。
10-04 14:58