Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C+中的类和实例+/CLI_C#_Class_C++ Cli_Converter_Instances - Fatal编程技术网

C# C+中的类和实例+/CLI

C# C+中的类和实例+/CLI,c#,class,c++-cli,converter,instances,C#,Class,C++ Cli,Converter,Instances,我已经使用C#.net很长时间了,最近我决定切换到C++/CLI会有好处。因此,我决定获得一个转换器,并将我的一个较大项目转换为C++/CLI,我发现了一个非常好的转换器,只是有几个大问题: 对于我在C#项目中拥有的每个非静态类,每当代码创建新实例时,编译器都会出现错误。“缺少类型说明符-假定为int…”所有类的标题均为public ref class ClassName:BaseClassName 这也是非常令人困惑的,因为应该是静态的类和不应该是静态的类的标题都是这样的 转换器还在代码中的某

我已经使用C#.net很长时间了,最近我决定切换到C++/CLI会有好处。因此,我决定获得一个转换器,并将我的一个较大项目转换为C++/CLI,我发现了一个非常好的转换器,只是有几个大问题:

对于我在C#项目中拥有的每个非静态类,每当代码创建新实例时,编译器都会出现错误。“缺少类型说明符-假定为int…”所有类的标题均为
public ref class ClassName:BaseClassName
这也是非常令人困惑的,因为应该是静态的类和不应该是静态的类的标题都是这样的

转换器还在代码中的某些地方留下注释,说明:
//C++不允许在声明中初始化非静态字段:
它们总是在我最初的一个非静态类中,后面总是
类型VariableName
类型^VariableName

因此,显然我不理解C++/CLI类是如何工作的,我的问题是:C#和C++/CLI中的动态类有什么区别?如何创建动态C++/CLI类?我可能做错了什么?为什么在C++/CLI中,所有的类,不管是静态的还是非静态的,都以“ref”作为前缀?另外,这是否与在一个文件中包含多个类有关


如果您需要更多信息,请告诉我。

您需要了解C++/CLI才能真正理解转换器创建的代码

基本上,在C++/CLI中,
ref类
是一个C风格的类。正常的<代码>类< /C>(没有<代码> REF)是本机C++类定义。

从C#转换时,所有C#类声明都将作为
ref class
结束,因为它们是托管(.NET)类

//C++的注释不允许在其声明中初始化非静态字段
是因为不能在C++/CLI中内联定义其成员的类。例如,这个C#:

需要使用构造函数将其转换为C++/CLI:

ref class Foo
{
private:
    int test;
public:
    Foo()
    {
       test = 3;
    }
};

你应该在学习任何自动转换器之前尝试学习C++/CLI,因为自动转换工具不处理C++的转换。我可以通过不断地开发和切换来学习,这就是我从VB学习C++的方法,我已经了解了它的一些地方……哦,哈哈!我在评论中看到了initialization这个词,但它并没有在我的脑海中出现。我想这解决了我的一个问题。非常感谢。
ref class Foo
{
private:
    int test;
public:
    Foo()
    {
       test = 3;
    }
};