Управляваният клас не се компилира

Имам следния код във 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;
}

Промених Configuration Manager на Release и Build е отметнато. Проблемът е, че когато се опитам да компилирам, се появяват куп грешки, като например:

  • грешка C4980: '__gc': използването на тази ключова дума изисква /clr:oldSyntax опция на командния ред
  • не може да използва тази индиректност за тип "System::String"

Последните грешки показват, че не мога да използвам във втория конструктор String *s. Защо така?

Има ли нещо, което пропускам?


person Little    schedule 10.03.2014    source източник
comment
Не беше ли пенсиониран Managed C++ през 2003 г.?   -  person Kerrek SB    schedule 11.03.2014
comment
Не знаех, че @KerrekSB, току-що видях тази част на уеб страница   -  person Little    schedule 11.03.2014


Отговори (2)


Ако зададете съответната опция за компилатор на clr:oldsyntax в свойствата на проекта, както се казва в първото съобщение, следният код се компилира без грешки в Visual Studio 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;
}

Изглежда, че второто съобщение е резултат от това, че не сте задали опцията, посочена в първото съобщение.

Трябва да изберете меню ПроектСвойстваОбщи → *Поддръжка на CLR (или нещо друго, защото имам руската версия на Visual Studio 2010 I не мога да назова опцията точно на английски) → clr:oldsyntax

person Vlad from Moscow    schedule 10.03.2014

Трябва да използвате различен синтаксис за управляван код (не оператора *):

String ^ data;

Ще ви трябва и опцията от командния ред /clr.

Тази статия съдържа изобилие от примери: Низ (C++/CLI и C++/CX)

person MattG    schedule 10.03.2014