Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.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#_C++_.net_C++ Cli - Fatal编程技术网

C# C+中的内部编译器错误+/CLI代码

C# C+中的内部编译器错误+/CLI代码,c#,c++,.net,c++-cli,C#,C++,.net,C++ Cli,我翻译了下面的C代码 转换为C++/CLI代码,如下所示: try { a = gcnew A(args1...); b = gcnew A(args2...); dostuff(a, b); } finally { if (a != nullptr) delete a; if (b != nullptr) delete b; } 类型A、B、dostuff()是.NET库的一部分。我没有那个库的源代码 库收到了更新,构

我翻译了下面的C代码

转换为C++/CLI代码,如下所示:

try
{
    a = gcnew A(args1...);
    b = gcnew A(args2...);

    dostuff(a, b);
}
finally
{
    if (a != nullptr)
        delete a;
    if (b != nullptr)
        delete b;
}
类型A、B、dostuff()是.NET库的一部分。我没有那个库的源代码

库收到了更新,构造函数得到了一个附加参数

现在它变得一团糟。我在两个调用(C++/CLI和C#)中都添加了附加参数(a
string^

现在C#运行正常,C++/CLI会给出一个内部编译器错误

致命错误C1001:编译器中发生内部错误。 (编译器文件“f:\dd\vctools\compiler\cxxfe\sl\p1\c\cpimport.cpp”, 第16424行)

VS2017最新更新

@一些程序员都德:是的,但在实现方面,我不确定CLI是否也是如此。现在我知道了

@汉斯·帕桑:代码以前是有效的,所以我很确定这里不是这样。我可以进一步简化这个例子

事实上,A和B实际上不是不同的类型。 “A”的构造函数的形式为(c#):

现在,下面这一行导致了内部错误(c++):


代码很好,我不知道为什么会出现编译器错误,但是代码编写起来可能会容易得多

只需使用C++/CLI堆栈语义:

{ 
  A a{args1...};
  B b{args2...};

  dostuff(%a, %b);
}

这意味着所有IDispose都在使用您需要的东西。

代码接缝好的,我不知道为什么会出现编译器错误,但代码编写起来可能会简单得多

只需使用C++/CLI堆栈语义:

{ 
  A a{args1...};
  B b{args2...};

  dostuff(%a, %b);
}

这意味着所有IDispose都在使用您需要的东西。

与您的问题无关,但是
delete
接受空指针,它什么也不做。如果您在编译器中偶然发现了一个错误,最好的方法是将其提交给编译器供应商并尝试找到解决方法。这种情况会发生,当C++/CLI编译器的解析器被语法错误弄得太混乱时,它就不是那么防弹的了。代码片段不够好,无法指出问题所在,变量声明中缺少^hat是一个常见的问题。你必须向我们展示真实的代码。与你的问题无关,但是
delete
接受空指针,它什么也不做。如果你在编译器中偶然发现一个bug,最好的方法是将它提交给编译器供应商,并试着找到解决方法。这种情况发生了,当C++/CLI编译器的解析器被语法错误弄得太混乱时,它就不是那么防弹的了。代码片段不够好,无法指出问题所在,变量声明中缺少^hat是一个常见的问题。你必须给我们看真正的代码。
A^ a = gcnew A( System::IO::File::Open(filename, System::IO::FileMode::Create), filename);
{ 
  A a{args1...};
  B b{args2...};

  dostuff(%a, %b);
}