c++ - 窗体头文件中的 "error C2653: System is not a class or a namespace name",Visual C++

标签 c++ visual-studio-2010 visual-c++

我之前关于同一项目的问题:onetwo .没有必要阅读它们;只知道我正在尝试在 Visual C++ 项目中使用 native C++ SDK。这比我最初想象的要棘手得多,但是这个网站关于 Extending a native C++ project with managed code已经帮助了我很多。

按照最后一个链接的说明,我已将一个表单添加到我的 native C++ 项目中,该项目已自动将项目转换为 CLR 项目。只有 MainForm.cppInterface.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 Systemgcnew 不是标准 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/

相关文章:

c++ - 将赋值 move 到具有 const 值的对象

c++ - 指向运行时固定大小数组的指针是否合法?

c++ - 无论我选择什么选项,Qt 都会继续构建共享构建

c# - 在Linux中使用Visual Studio C#程序

c++ - 无法理解术语 'static'

c - 如何将宽字符串文字与 PRId32、PRIu64 等连接起来?

c++ - 成对的 std::make_heap

c - 如何在GIMP中制作API?

visual-studio-2010 - 为什么我会看到 "No applicable role project templates found"错误?

c++ - Winsock2 - 如何在客户端使用 IOCP