托管类不编译

时间:2014-03-10 23:07:43

标签: managed-c++

我在Visual C ++中有以下代码

#using <mscorlib.dll>

using namespace System;

__gc class classEx
{
public:
    classEx()
    {
        data="abcd";
    }
    classEx(String *s)
    {
        data=s;
    }
    String* getNombre()
    {
        return data;
    }
    void setNombre(String *s)
    {
        data=s;
    }
    private:
        String* data;
};

int main(void)
{
    classEx* obj=new classEx();
    return 0;
}

我已经将配置管理器更改为Release和Build进行了检查,问题是当我尝试编译时出现了一堆错误,例如:

  • 错误C4980:'__ gc':使用此关键字需要/ clr:oldSyntax命令行选项
  • 不能在类型'System :: String'
  • 上使用此间接

我不能在第二个构造函数中使用String * s的最后一个错误点,为什么会这样?有什么我想念的吗?

由于

2 个答案:

答案 0 :(得分:1)

如果要在项目属性中将clr:oldsyntax的相应编译器选项设置为第一条消息,则以下代码在MS VS 2010中编译时没有错误

#include "stdafx.h"

using namespace System;

__gc class A
{
public:
    A( String *s ) : data( s ) {}
    String * get_data() { return data; }
private:
    String *data;
};

int main()
{
    A *pa = new A( "Hello World" );

    Console::WriteLine( pa->get_data() );

    return 0;
}

似乎第二条消息是您没有设置第一条消息中指出的选项的结果。

您应该选择项目 - &gt;属性 - &gt; general-&gt;支持CLR(或其他原因因为我有俄语版本的MS VS 2010我无法用英语命名该选项) - &gt; CLR:oldsyntax

答案 1 :(得分:-1)

您需要为托管代码使用不同的语法(而不是*运算符):

String ^ data;

您还需要/ clr命令行选项。

这篇文章有很多例子: http://msdn.microsoft.com/en-us/library/ms177218.aspx