我包含编组库

时间:2015-10-01 11:30:42

标签: c++-cli marshalling

我有一个与PLC进行通信的应用程序。

我有一些用于通信的库,但是当我添加marshal时:

#include <msclr\marshal_cppstd.h>

它给了我以下错误:

C1189:#error:C ++标准库禁止宏关键字化。启用警告C4005以查找禁用的宏。

C4005:'inline':宏重新定义

此C4005警告显示在 xkeycheck.h第203行包含:

#define inline EMIT WARNING C4005

我得到了更多的错误(1800 +)。

那么这个错误是什么意思?

1 个答案:

答案 0 :(得分:0)

inline是一个C ++关键字,此#define正在重新定义。它警告你改变inline的含义是非常危险的。

msclr\marshal_cppstd.h具有标有inline的函数,因此这可能是使用重新定义的内联定义的第一次出现的代码,并且它意识到它可能不是您所使用的内容。期待。

我会质疑为什么xkeycheck.h正在重新定义inline - 也许他们的图书馆不允许内联?也许您需要在包含之前推送/弹出包含inline#undef inline的{​​{1}}定义?

更新:我做了更多研究,我假设xkeycheck来自PLC代码。不是。因此,如果xkeycheck发现您重新定义了任何C ++关键字,则会将其设置为报告此错误。在这种情况下inline。如上所述,marshal_cppstd.h实际上使用了inline,这是第一个出现问题并发出警告的迹象。所以....我的建议是搜索你的所有代码,并找出你所包含的内容或者#define {#1; d inline到其他地方。

我会将光标放在内联上,然后按F12转到定义。