【问题标题】:Trying to compile Tessnet2 (Visual Studio 2008 C++) project in Visual Studio 2010尝试在 Visual Studio 2010 中编译 Tessnet2 (Visual Studio 2008 C++) 项目
【发布时间】:2011-08-16 21:00:51
【问题描述】:

我从http://www.pixel-technology.com/freeware/tessnet2/ 下载了 Tessnet2 项目,并且能够在 Visual Studio 2008 中很好地构建它。但是,我需要为 .NET 4 重新编译它。我对 C++ 知之甚少,但我得到的错误当我尝试使用 VS 2010 进行编译时:

错误 4 错误 C2439: 'std::_Pair_base<_ty1>::first' : 无法初始化成员 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163 1 tessnet2

错误 6 错误 C2439: 'std::_Pair_base<_ty1>::second' : 无法初始化成员 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163 1 tessnet2

错误 3 错误 C2440: 'initializing' : cannot convert from 'int' to 'ScrollView *' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163 1 tessnet2

错误 5 错误 C2440: 'initializing' : cannot convert from 'int' to 'SVEvent *' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163 1 tessnet2

我假设您不能只在 2010 年打开一个 2008 年的 C++ 项目,然后像大多数实际的 .NET 项目一样进行简单的转换。但是,如果有人能给我一些见解,我将不胜感激。

【问题讨论】:

    标签: c++ .net-4.0 tessnet2


    【解决方案1】:

    我遇到了同样的问题。

    似乎 VS2010 编译器比 VS2008 更严格地将 NULL 定义为文字 0。因此,您必须将此项目中的 NULL 引用显式转换为相应的类类型。

    具体来说,你必须对scrollview.cpp文件做如下四点修改,才能让工程编译:

    -- 更改第 137 行

    std::pair<ScrollView*, SVEventType> awaiting_list_any_window(NULL,
                                                              SVET_ANY);                                                          
    

    std::pair<ScrollView*, SVEventType> awaiting_list_any_window((ScrollView*)NULL,
                                                              SVET_ANY);
    

    -- 更改第 409 行

    waiting_for_events[ea] = std::pair<SVSemaphore*, SVEvent*> (sem, NULL);
    

    waiting_for_events[ea] = std::pair<SVSemaphore*, SVEvent*> (sem, (SVEvent*) NULL);
    

    -- 更改第 427 行

    std::pair<ScrollView*, SVEventType> ea(NULL, SVET_ANY);
    

    std::pair<ScrollView*, SVEventType> ea((ScrollView*)NULL, SVET_ANY);
    

    -- 更改第 429 行

    waiting_for_events[ea] = std::pair<SVSemaphore*, SVEvent*> (sem, NULL);
    

    waiting_for_events[ea] = std::pair<SVSemaphore*, SVEvent*> (sem, (SVEvent*) NULL);
    

    【讨论】:

    • 不会使用nullptr_t 代替 NULL 获得相同的结果,而无需相当丑陋的演员表?
    • @Voo 我从来没有使用过 nullptr_t,但是当我刚刚尝试用它替换 NULL 时,我得到了一个“错误:不允许类型名称”。
    • 我假设您也尝试过std::nullptr_t?奇怪,我想如果他们在定义中有一个指针而不是一个 int 这会起作用 - 奇怪,但我离那里的专家还很远。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多