返回C++; 我上次使用C++是在它被管理之前。最近,我从java返回,现在C++可以被管理!p>

返回C++; 我上次使用C++是在它被管理之前。最近,我从java返回,现在C++可以被管理!p>,c++,c++-cli,C++,C++ Cli,没过多久,我就意识到了gcnew和^的用途。然而,我有点被容器卡住了 我如何创建一个容器,其元素是我自己创建的托管类?我正在寻找与STLvector类似的容器 我想要这样的东西: List<MyClass ^> ^ mylist; List^mylist; 但是Visual Studio返回以下错误: Error 2 error C4430: missing type specifier - int assumed. Note: C++ does not support

没过多久,我就意识到了
gcnew
^
的用途。然而,我有点被容器卡住了

我如何创建一个容器,其元素是我自己创建的托管类?我正在寻找与STL
vector
类似的容器

我想要这样的东西:

List<MyClass ^> ^ mylist;
List^mylist;
但是Visual Studio返回以下错误:

Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int

Error   3   error C2238: unexpected token(s) preceding ';'

Error   1   error C2143: syntax error : missing ';' before '<'
错误2错误C4430:缺少类型说明符-假定为int。注意:C++不支持默认int
错误3错误C2238:在“;”之前的意外标记
错误1错误C2143:语法错误:缺少“;”在
<>我上次使用C++是在它被管理之前。最近,我从java返回,现在C++可以被管理!p>
C++无法“管理”。您现在看到的是三种语言:

  • C++(您将回到这里)

  • 托管C++(MC++)——这是微软将C++更改为新语言的第一个版本,它能够同时使用本机代码(普通C++)和.NET平台(托管)。这已被Microsoft弃用,取而代之的是C++/CX。因此,不要编写MC++代码

    > P>C++/CX-----这是微软为.NET互操作性更改C++的最新版本。当您需要编写与托管(即在.NET运行时下托管/运行)和非托管代码交互的代码时,可以使用它

    无论哪种方式,对于要编译的代码,都需要一个编译器开关来启用托管代码(
    /CLR
    )和以下更改:

    • 将类定义为C++/CX类(使用ref关键字)
    • 从集合导入列表(您将有效地使用.NET集合)
    • 使用
      ref new
      (类似于Java和.NET)分配所有内容
    也就是说,除非您使用MS.NET平台在托管代码和非托管代码之间编写互操作代码,否则不要使用C++/CLI。使用C++来管理非托管代码,以及C或VB的托管代码。这样你就不会那么头疼了

    <>我上次使用C++是在它被管理之前。最近,我从java返回,现在C++可以被管理!p> C++无法“管理”。您现在看到的是三种语言:

  • C++(您将回到这里)

  • 托管C++(MC++)——这是微软将C++更改为新语言的第一个版本,它能够同时使用本机代码(普通C++)和.NET平台(托管)。这已被Microsoft弃用,取而代之的是C++/CX。因此,不要编写MC++代码

    > P>C++/CX-----这是微软为.NET互操作性更改C++的最新版本。当您需要编写与托管(即在.NET运行时下托管/运行)和非托管代码交互的代码时,可以使用它

    无论哪种方式,对于要编译的代码,都需要一个编译器开关来启用托管代码(
    /CLR
    )和以下更改:

    • 将类定义为C++/CX类(使用ref关键字)
    • 从集合导入列表(您将有效地使用.NET集合)
    • 使用
      ref new
      (类似于Java和.NET)分配所有内容

    也就是说,除非您使用MS.NET平台在托管代码和非托管代码之间编写互操作代码,否则不要使用C++/CLI。使用C++来管理非托管代码,以及C或VB的托管代码。这样你就不会再头痛了。

    让这个^和GCNEX尽可能快地离开,除非它还没有晚些,去做一些正常的事情。这不是标准C++。幸运的是,C++没有被“管理”。这是其他一些语言,可能接近C++或源自C++。<代码> GCNEX//CODE >“托管<代码> ^ < /Cord>指针”是C++/CLI特性。完全不同的语言。请注意,这是一种非标准的Microsoft语言。坚持C++标准,除非你只想使用Windows和VisualStudio.@ DeWiSun,我删除了管理C++标签,因为它是一个非常不同的语言扩展,语法完全不同。这显然是C++ + CLI,应该标记C++ + CLI(我已经做过了)。如果不能迟到,就要把这个^和GCNEX尽可能快地放在一起,然后去做一些正常的事情。这不是标准C++。幸运的是,C++没有被“管理”。这是其他一些语言,可能接近C++或源自C++。<代码> GCNEX//CODE >“托管<代码> ^ < /Cord>指针”是C++/CLI特性。完全不同的语言。请注意,这是一种非标准的Microsoft语言。坚持C++标准,除非你只想使用Windows和VisualStudio.@ DeWiSun,我删除了管理C++标签,因为它是一个非常不同的语言扩展,语法完全不同。这显然是C++/CLI,应该标记为C++-CLI(我已经这样做了)。我最初创建了一个CLI windows窗体应用程序,它非常适合快速运行基于GUI的应用程序,但在混合托管和非托管代码时遇到了问题。我如何才能在TE和TE之间切换?我认为最简单的方法是编写三个不同的库(客户端本地C++代码,.NET GUI代码和C++ + CLI,用于两个之间的迭代)。这意味着在三个项目之间拆分VS解决方案。不过,我不确定这是否是最佳做法。自从我上次接触.NET平台已经三年了。这个答案基本上是好的,但你似乎混淆了C++/CLI(对于.NET,基于GC)和C++/CX(对于Windows应用商店/Windows Phone应用,基于COM refcount的衍生产品)。@pbs在大多数情况下,“它只是工作”。请针对您遇到的具体问题发布其他问题。令人惊讶的是,
    ref
    不是