C++:无法用 new 实例化我的类

标签 c++ types

<分区>

使用 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++ 的新手,但我已经在大学的计算机科学类(class)中,我经常使用 C# 并用 C 编写了一些东西...)。我认为它不能缺少任何引用或包含,因为它实际上处理 l1 声明......但是如果我在同一个源文件中创建一些其他类并以相同的方式实例化它,一切正常......

我用了this tutorial将库连接到他们使用的项目,所以这应该没问题。

我也为此进行了很多谷歌搜索,但事实证明,要么无法找到针对此问题的特定搜索词,要么我发现了某种特殊情况...

以下是上述类(class)的一些摘录:

  • 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:
    ...
    

最佳答案

programma::UTF8Lexer l1(stream);可能被解析为programma::UTF8Lexer l1(std::stream __Unnamed_Argument);,即一个函数的声明命名为 l1。删除 using namespace std:: 来解决这个问题。

关于C++:无法用 new 实例化我的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15341376/

相关文章:

c++ - 我们可以假设以下任何一对浮点算术语句总是产生相同的结果吗?

java - JsonPath - 读取 Java Long 类型

mysql - 将 MySQL TEXT 字段转换为 MEDIUMTEXT 的任何陷阱?

c++ - QTextStream 读取一个字符串直到制表符

types - 这个概念是否有一个术语,它是否存在于静态类型语言中?

for-loop - 如何处理迭代器的类型?

c++ - Qt C++ - QList<float**> 类型不允许

c++ - boost spirit 业力真实发电机性能

c++ - 在注入(inject)的 DLL 中调用函数

c++ - 部分模板类中不允许指向不完整类类型的指针