错误C2976:'std :: tr1 :: array':MS C ++ express 2010中的模板参数太少

时间:2014-05-01 09:40:11

标签: c++ c++-cli

我正在使用C ++ Express 2010中的Windows窗体项目。对Form.h进行了一些更改,现在编译程序时出现错误。请注意,编译器建议错误在主程序中open gl test 2 - #includes表单。在我开发代码时,所有编译好了好几天,然后昨晚改变了一些东西,现在我得到了错误。

open gl test 2中的主程序与我创建的任何其他基于表单的项目相同 - 我比较检查[除了命名空间的明显变化等导致其不同的项目]

// open gl test 2.cpp : main project file.

#include "stdafx.h"
#include "Form1.h"

using namespace opengltest2;

[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
    // Enabling Windows XP visual effects before any controls are created
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    // Create the main window and run it
    Application::Run(gcnew Form1());
    return 0;
} 

错误是:

1>open gl test 2.cpp(9): error C2976: 'std::tr1::array' : too few template arguments
1>          D:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\array(18) : see declaration of 'std::tr1::array'
1>open gl test 2.cpp(9): error C3699: '^' : cannot use this indirection on type 'std::tr1::array'
1>          compiler replacing '^' with '*' to continue parsing
编译器抱怨的

行是

int main(array<System::String ^> ^args)

因此,故障无法在编译器声称的位置 - 我无法在包含的文件中找到代码中的错误 - 它们可以正确编译。我假设错误必须在form.h中,因为我修改了导致此错误,但我看不到它。而且我很确定我没有更改某些项目设置。

我没有包含form1.h的代码,因为它太长了。猜猜我正在寻找的是人们搜索错误的经验。我可以用什么策略来解决这个问题?如果我把头发拉出来,我会被它包围。请帮我保存我的不存在的头发。

1 个答案:

答案 0 :(得分:14)

看起来编译器在托管数组类型和std库中的数组类型之间感到困惑。这可能是因为你正在做某个地方using namespace std - 理想情况下你应该明确地引用正确的命名空间(std :: array或cli :: array),或者如果不需要则删除<array>的包含。

请注意,常量大小的std :: array不适合与命令行参数一起使用 - 你需要使用像cli :: array这样的可变大小的容器。