表单头文件Visual C ++中的“错误C2653:系统不是类或命名空间名称”

时间:2013-04-02 11:40:11

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

我以前关于同一项目的问题: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中轻松工作的东西。

有谁可以告诉我,我可能做错了什么?我的猜测是它非常小;我忘记改变一些旗帜,缺少参考或类似的东西,但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:3)

你在哪里直接和间接地包括MainForm.h
如果您在MainForm.h中加入Interface.h,则可以间接地将其包含在Interface.h的任何位置。这意味着,如果您在任何未使用Interface.h编译的翻译单元(即* .cpp)中包含/clr,那么编译器当然会抱怨它,因为namespace Systemgcnew不属于标准C ++。

因此,您应仅在MainForm.h中加入Interface.cpp,并在Interface.h中使用转发声明。