我有一个与PLC进行通信的应用程序。
我有一些用于通信的库,但是当我添加marshal时:
#include <msclr\marshal_cppstd.h>
它给了我以下错误:
C1189:#error:C ++标准库禁止宏关键字化。启用警告C4005以查找禁用的宏。
C4005:'inline':宏重新定义
此C4005警告显示在 xkeycheck.h第203行包含:
#define inline EMIT WARNING C4005
我得到了更多的错误(1800 +)。
那么这个错误是什么意思?
答案 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转到定义。