【问题标题】:MFC header file under Linux g++: expected ‘{’ before ‘<’ tokenLinux g++ 下的 MFC 头文件:在“<”标记之前需要“{”
【发布时间】:2012-07-05 03:22:36
【问题描述】:

我有一个基于 MFC 的旧 C++ 项目,我正在尝试在 Linux (Centos 6.2) 上的 eclipse 中使用 g++ 进行编译。 我从头文件中收到以下错误:

RawData.h:54: error: expected template-name before ‘<’ token
RawData.h:54: error: expected ‘{’ before ‘<’ token
RawData.h:54: error: expected unqualified-id before ‘<’ token

这是头文件中出现问题的部分(从第 54 行开始):

class CRawDayData: public CArray<CRawQHData*,CRawQHData*>
{
public:
    CRawDayData();
    virtual ~CRawDayData();

public:
    tm m_tmDate;

};

我认为这个问题与 CArray 有关,因为我在 Linux 上并且没有使用 MFC 的 afx 东西。有什么想法吗?

【问题讨论】:

  • 编译器根本不知道CArray 是什么,因此会出现错误消息。如果它是一个“基于 MFC”的项目,正如您自己所说的,那么您将需要 Linux 上的 MFC。 CArray 是 MFC 的一部分。那么,你打算怎么做呢?将 MFC 移植到 Linux?
  • 是的,我正在将 Windows 程序移植到 Linux。我只需要与 CArray 等效的 Linux,以及头文件的正确语法。倾向于 STL std::vector。

标签: c++ linux mfc porting


【解决方案1】:

如果这是您得到的唯一错误,我建议将 CArray 替换为与 STL 等效的 std::vector。如果 MFC 或 windows API 被广泛使用,最好尝试针对 Winelib 进行编译。

参考:Run MFC Program on Linux

使用STL,你可以这样写:

#include<vector>

class CRawDayData: public vector<CRawQHData*>
{
public:
    CRawDayData();
    virtual ~CRawDayData();

public:
    tm m_tmDate;

};

【讨论】:

  • 感谢您的回答,在我看来,STL 将是转换的最佳途径。那么,我将如何在 STL 中做到这一点?在头文件中用 std::vector 替换 CArray 的正确语法是什么?
  • 顺便说一句,STL 容器并不意味着派生自,它们被用作您创建的任何类中的组件(即成员),或者只是使用 vector 作为独立变量.从标准容器派生的问题是没有用于 std::vector 或任何标准容器类的虚拟析构函数。
  • 谢谢,这是一个很大的帮助。但是,通过上述代码更改,我仍然收到此错误: RawData.h:55: error: expected template-name before ' 之前的预期 unqualified-id
  • 检查代码codepad.org/yTFInE6g 使用你的类编译得很好。也许这可以帮助找到丢失的东西。
【解决方案2】:

所有 MFC 的东西都只是 windows,所以它们在 Linux 上不可用。您必须转换为使用一些跨平台或特定于 linux 的库,例如 STL、wxWidgets 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    • 2019-10-18
    • 2011-04-14
    • 1970-01-01
    • 2018-03-03
    相关资源
    最近更新 更多