Visual Studio 2013 Express 中的错误 13:输出名称
Error 13 in Visual Studio 2013 Express: output name
所以我正在尝试构建一个媒体播放器,并且正在关注 YouTube 上的教程。
我按照教程输入了代码 1 for 1,所有名称 'output' 的实例都给出了错误 13。我添加了 NAudio 1.6.3 dll 作为 well.Maybe 我得到了错误的版本?
这是 YouTube 视频的link...C# Audio Tutorial 1 - Wave File with NAudio
这是我的代码...
using System;
using System.Windows.Forms;
namespace Naudio_Tutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private NAudio.Wave.WaveFileReader wave = null;
private NAudio.Wave.DirectSoundOut wave = null;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave File (*.wav)|*.wav;";
if (open.ShowDialog() != DialogResult.OK) return;
DisposeWave();
wave = new NAudio.Wave.WaveFileReader(open.FileName);
Output = new NAudio.Wave.DirectSoundOut();
Output.Init(new NAudio.Wave.WaveChannel32(wave));
Output.Play();
pauseButton.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
if (output != null)
{
if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Pause();
else if (output.PlaybackState == NAudio.Wave.PlaybackState.Paused) output.Play();
}
}
private void DisposeWave()
{
if (output != null)
{
if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Stop();
output.Dispose();
output = null;
}
if (wave != null)
{
wave.Dispose();
wave = null;
}
}
private void Form1_Closing(object sender, FormClosingEventArgs e)
{
DisposeWave();
}
}
}
您还没有申报Output
。如果您打算在此方法中仅在本地使用 Output
,请添加 var
关键字
var Output = new NAudio.Wave.DirectSoundOut();
如果您以后需要访问它(这似乎是您的情况),或者将 Output
声明为字段:
public partial class Form1 : Form
{
private NAudio.Wave.DirectSoundOut output;
...
}
另请注意,C# 区分大小写。要么写 output
要么 Output
但不要混合这两种变体。在 C# 中,camelCase 优先用于字段、方法参数和局部变量;类型名称、属性和方法首选 PascalCase。
这是你的问题:
private NAudio.Wave.DirectSoundOut wave = null;
应该是:
private NAudio.Wave.DirectSoundOut Output = null;
我注意到的第一件事是您声明了两个具有相同名称的不同对象。
根据我的经验,应用程序甚至不应该编译,因为这会产生冲突。
这一行:
private NAudio.Wave.DirectSoundOut wave = null;
应改为:
private NAudio.Wave.DirectSoundOut output = null;
编译器会报错,因为您正试图访问一个尚未声明的对象。
以下将导致异常,例如您所描述的异常:
Output = new NAudio.Wave.DirectSoundOut();
Output.Init(new NAudio.Wave.WaveChannel32(wave));
Output.Play();
此外,只是一个小费。错误 13 的描述性不够。包括整个错误消息和堆栈跟踪将帮助其他人帮助您。
所以我正在尝试构建一个媒体播放器,并且正在关注 YouTube 上的教程。
我按照教程输入了代码 1 for 1,所有名称 'output' 的实例都给出了错误 13。我添加了 NAudio 1.6.3 dll 作为 well.Maybe 我得到了错误的版本?
这是 YouTube 视频的link...C# Audio Tutorial 1 - Wave File with NAudio
这是我的代码...
using System;
using System.Windows.Forms;
namespace Naudio_Tutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private NAudio.Wave.WaveFileReader wave = null;
private NAudio.Wave.DirectSoundOut wave = null;
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();
open.Filter = "Wave File (*.wav)|*.wav;";
if (open.ShowDialog() != DialogResult.OK) return;
DisposeWave();
wave = new NAudio.Wave.WaveFileReader(open.FileName);
Output = new NAudio.Wave.DirectSoundOut();
Output.Init(new NAudio.Wave.WaveChannel32(wave));
Output.Play();
pauseButton.Enabled = true;
}
private void button2_Click(object sender, EventArgs e)
{
if (output != null)
{
if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Pause();
else if (output.PlaybackState == NAudio.Wave.PlaybackState.Paused) output.Play();
}
}
private void DisposeWave()
{
if (output != null)
{
if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing) output.Stop();
output.Dispose();
output = null;
}
if (wave != null)
{
wave.Dispose();
wave = null;
}
}
private void Form1_Closing(object sender, FormClosingEventArgs e)
{
DisposeWave();
}
}
}
您还没有申报Output
。如果您打算在此方法中仅在本地使用 Output
,请添加 var
关键字
var Output = new NAudio.Wave.DirectSoundOut();
如果您以后需要访问它(这似乎是您的情况),或者将 Output
声明为字段:
public partial class Form1 : Form
{
private NAudio.Wave.DirectSoundOut output;
...
}
另请注意,C# 区分大小写。要么写 output
要么 Output
但不要混合这两种变体。在 C# 中,camelCase 优先用于字段、方法参数和局部变量;类型名称、属性和方法首选 PascalCase。
这是你的问题:
private NAudio.Wave.DirectSoundOut wave = null;
应该是:
private NAudio.Wave.DirectSoundOut Output = null;
我注意到的第一件事是您声明了两个具有相同名称的不同对象。 根据我的经验,应用程序甚至不应该编译,因为这会产生冲突。
这一行:
private NAudio.Wave.DirectSoundOut wave = null;
应改为:
private NAudio.Wave.DirectSoundOut output = null;
编译器会报错,因为您正试图访问一个尚未声明的对象。 以下将导致异常,例如您所描述的异常:
Output = new NAudio.Wave.DirectSoundOut();
Output.Init(new NAudio.Wave.WaveChannel32(wave));
Output.Play();
此外,只是一个小费。错误 13 的描述性不够。包括整个错误消息和堆栈跟踪将帮助其他人帮助您。