【发布时间】:2013-04-02 11:40:11
【问题描述】:
我之前关于同一个项目的问题:one 和 two。没有必要阅读它们;只知道我正在尝试在 Visual C++ 项目中使用本机 C++ SDK。这比我最初想象的要复杂得多,但是这个关于Extending a native C++ project with managed code 的网站已经帮助了我很多。
根据最后一个链接的说明,我已向我的本地 C++ 项目添加了一个表单,该项目已自动将项目转换为 CLR 项目。不过,只有 MainForm.cpp 和 Interface.cpp(允许本地 C++ 代码创建和显示 MainForm 的文件)使用 /clr 标志编译;其他文件保持原生。
我现在遇到的问题是,Visual Studio 似乎无法识别 MainForm.h 中使用的任何 CLR 内容。因此,在以下几行中:
using namespace System;
using namespace System::ComponentModel;
using namespace System::Collections;
using namespace System::Windows::Forms;
using namespace System::Data;
using namespace System::Drawing;
System 这个词总是带有红色下划线,并带有相应的错误:
error C2653: 'System' is not a class or a namespace name
对于每一行。
它也不能识别单词gcnew 和其他应该在 CLR 中毫不费力地工作的东西。
谁能告诉我我做错了什么?我的猜测是它非常小。一些我忘记更改的标志,缺少参考或类似的东西,但我无法弄清楚它是什么。
【问题讨论】:
-
你在哪里包含
MainForm.h?如果你将它包含在任何未用/clr编译的翻译单元(即*.cpp)中,那么编译器当然会抱怨它,因为namespace System和gcnew不是标准 C++ 的一部分。 -
我把它包含在
Interface.h中。Interface.cpp是用/clr编译的,但正如我帖子中的第三个链接所说,这应该可以。 -
好的,你在哪里包含
Interface.h?由于您在Interface.h中包含MainForm.h,因此您也可以在包含Interface.h的任何位置间接包含它。也许你应该只将它包含在Interface.cpp中并在Interface.h中使用前向声明 -
哇哦,原来如此!我在
Interface.h中包含MainForm.h而不是Interface.cpp。这在教程中没有提到,但是当你考虑它时它是合乎逻辑的......非常感谢。请将此作为答案发布,以便我接受并投票。 ;)
标签: c++ visual-studio-2010 visual-c++