我已经找到了这个问题,但我不知道(并且没有找到)如何解决它。这里有谁知道如何解决这个问题?我正在使用EMGU,但问题在于c#编码(我对C#来说相当新) - 我认为这与out语句有关,因为我没有太多使用它们:
Image<Gray, Byte> first_image;
if (start_at_frame_1 == true)
{
Perform_custom_routine(imput_frame, out first_image);
}
else
{
Perform_custom_routine(imput_frame, out second_image);
}
Comparison(first_image);
答案 0 :(得分:6)
您必须为变量提供默认值:
Image<Gray, Byte> first_image = null;
如果您将second_image
作为out参数传递,则有可能不会指定任何内容。
答案 1 :(得分:2)
你有3个选择
Image<Gray, Byte> first_image = default(Image<Gray, Byte>);
或
Image<Gray, Byte> first_image = null;
或
Image<Gray, Byte> first_image = new Image<Gray, Byte>();
不要忘记使用second_image
执行此操作。
答案 2 :(得分:1)
编译器警告您,您将在调用Comparison
时使用未分配的变量。如果start_at_frame_1
为false
,则永远不会设置变量first_image
。
您可以通过在初始化或else块中设置first_image = null
来解决此问题。
答案 3 :(得分:0)
或者你可以把它作为Perform_custom_routine的返回参数。
Image<Gray, Byte> first_image;
if (start_at_frame_1 == true)
{
first_image = Perform_custom_routine(imput_frame, out first_image);
}
else
{
first_image = Perform_custom_routine(imput_frame, out second_image);
}
答案 4 :(得分:-1)
如果使用'out'关键字,则必须在传递之前为变量赋值。
如果使用'ref'关键字,则必须在返回之前为传递给它的方法赋值。