C++中的混合管理

Pov*_*las 4 c++-cli managed

我已经为我的程序添加了一个类并进行了测试.我真的很惊讶有任何真正的错误.这是代码:

#pragma once
#include "Iingredient.h"
#include <string>
#include <vector>

using namespace std;

ref class Recipe{
private:
    string partsName;
    vector<Iingredient> ing;
public:
    Recipe(){}

};
Run Code Online (Sandbox Code Playgroud)

以下是错误:

错误23错误C4368:无法将'partsName'定义为托管'Recipe'的成员:不支持混合类型c:\ users\user\documents\visual studio 2010\projects\smestras2_l1\Recipe.h 10 1 file2_L1

错误24错误C4368:无法将'ing'定义为托管'Recipe'的成员:不支持混合类型c:\ users\user\documents\visual studio 2010\projects\smestras2_l1\Recipe.h 11 1 file2_L1

我google了一下,发现它有关托管和非托管代码.如何解决这个问题?它是否与manged和非托管代码相关?如果是这样的话?

svi*_*ick 12

我同意其他人的观点:在大多数情况下你不应该使用C++/CLI,你应该使用C#(或其他"普通"托管语言)(假设你想编写一个.Net应用程序).C++/CLI主要用于特殊情况,例如托管代码和非托管代码之间的互操作.

如果您确定要使用C++/CLI,则不能将本机类放入托管类.但是你可以在那里指向本机类:

ref class Recipe{
private:
    string* partsName;
    vector<Iingredient>* ing;
};
Run Code Online (Sandbox Code Playgroud)

上面的代码有效.但是你必须记住,那些是正常的本机C++指针,这意味着你必须手动delete它们.要执行该属性,您应该阅读有关析构函数和终结器如何在C++/CLI中工作的内容.