我之前关于同一项目的问题:one和 two .没有必要阅读它们;只知道我正在尝试在 Visual C++ 项目中使用 native C++ SDK。这比我最初想象的要棘手得多,但是这个网站关于 Extending a native C++ project with managed code已经帮助了我很多。
按照最后一个链接的说明,我已将一个表单添加到我的 native C++ 项目中,该项目已自动将项目转换为 CLR 项目。只有 MainForm.cpp
和 Interface.cpp
(允许 native 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
- 直接和间接?
如果您在 Interface.h
中包含 MainForm.h
,则您也可以在包含 Interface.h
的任何地方间接包含它。这意味着,如果您随后将 Interface.h
包含在未使用 /clr
编译的任何翻译单元(即 *.cpp)中,那么编译器当然会提示它,因为 namespace System
和 gcnew
不是标准 C++ 的一部分。
因此,您应该只在 Interface.cpp
中包含 MainForm.h
,并在 Interface.h
中使用前向声明。
关于c++ - 窗体头文件中的 "error C2653: System is not a class or a namespace name",Visual C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15763179/