【问题标题】:"error C2653: System is not a class or a namespace name" in Form header file, Visual C++窗体头文件中的“错误 C2653:系统不是类或命名空间名称”,Visual C++
【发布时间】:2013-04-02 11:40:11
【问题描述】:

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

根据最后一个链接的说明,我已向我的本地 C++ 项目添加了一个表单,该项目已自动将项目转换为 CLR 项目。不过,只有 MainForm.cppInterface.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 Systemgcnew不是标准 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++


【解决方案1】:

您在哪里包括MainForm.h - 直接和间接?
如果您在Interface.h 中包含MainForm.h,您也可以在包含Interface.h 的任何位置间接包含它。这意味着,如果您随后将Interface.h 包含在任何未使用/clr 编译的翻译单元(即*.cpp)中,那么编译器当然会抱怨它,因为namespace Systemgcnew 不是一部分标准 C++。

因此,您应该只在Interface.cpp 中包含MainForm.h,并在Interface.h 中使用前向声明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    相关资源
    最近更新 更多