Linux g++ 下的 MFC 头文件:在“<”标记之前需要“”

Posted

技术标签:

【中文标题】Linux g++ 下的 MFC 头文件:在“<”标记之前需要“”【英文标题】: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。 【参考方案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 的正确语法是什么? 请浏览文档。 cplusplus.com/reference/stl/vector 顺便说一句,STL 容器并不意味着派生自,它们被用作您创建的任何类中的组件(即成员),或者只是使用 vector 作为独立变量.从标准容器派生的问题是没有用于 std::vector 或任何标准容器类的虚拟析构函数。 谢谢,这是一个很大的帮助。但是,通过上述代码更改,我仍然收到此错误: RawData.h:55: error: expected template-name before ' 之前的预期 unqualified-id 检查代码codepad.org/yTFInE6g 使用你的类编译得很好。也许这可以帮助找到丢失的东西。【参考方案2】:

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

【讨论】:

以上是关于Linux g++ 下的 MFC 头文件:在“<”标记之前需要“”的主要内容,如果未能解决你的问题,请参考以下文章

linux C语言的头文件对应Windows下的头文件是哪些??

怎样才能在LINUX环境下编译带conio.h头文件的程序啊?,好像是LINUX平台上的编译器不包含这个头文件

关于linux下的文件权限

linux 下的内核头文件放在哪里

linux怎么include不同文件夹下的头文件

1基于MFC的OpenGL程序