自己定义的WAVEdlg.cpp文件中的错误,报错误如下:
--------------------Configuration: MyVC10 - Win32 Debug--------------------
Compiling...
WAVEdlg.cpp
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(153) : error C2601: 'OnStop' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(169) : error C2601: 'DestroyWindow' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(175) : error C2601: 'OnInitDialog' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(188) : error C2601: 'Open' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(202) : error C2601: 'close' : local function definitions are illegal
E:\C++\VC实例\MyVC10\WAVEdlg.cpp(213) : fatal error C1004: unexpected end of file found
执行 cl.exe 时出错.MyVC10.exe - 1 error(s), 0 warning(s)// WAVEdlg.cpp : implementation file
//#include "stdafx.h"
#include "MyVC10.h"
#include "WAVEdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CWAVEdlg dialog
CWAVEdlg::CWAVEdlg(CWnd* pParent /*=NULL*/)
: CDialog(CWAVEdlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CWAVEdlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
}
void CWAVEdlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CWAVEdlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CWAVEdlg, CDialog)
//{{AFX_MSG_MAP(CWAVEdlg)
ON_BN_CLICKED(IDC_OPEN, OnOpen)
ON_BN_CLICKED(IDC_PLAY, OnPlay)
ON_BN_CLICKED(IDC_RECORD, OnRecord)
ON_BN_CLICKED(IDC_SAVE, OnSave)
ON_BN_CLICKED(IDC_STOP, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
// CWAVEdlg message handlersvoid CWAVEdlg::OnOpen() 
{
CString path,str;
CFileDialog filedlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,"(*.wav)|*.wav||");
if(filedlg.DoModal()==IDOK)
{
path=filedlg.GetPathName();
if(!Open(path))
{
MessageBox("不能打开文件!");
return;
}
CWnd*m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(TRUE);
}SetDlgItemText(IDC_FILENAME,path);
MCI_STATUS_PARMS statusparms;
statusparms.dwItem=MCI_WAVE_STATUS_SAMPLESPERSEC;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
   (DWORD)(LPVOID)&statusparms);
str.Format("%5.3f",statusparms.dwReturn/1000.0);
str+="khz";
SetDlgItemText(IDC_SAMPLERATE,str);
str.Empty();
statusparms.dwItem=MCI_WAVE_STATUS_CHANNELS;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
    (DWORD)(LPVOID)&statusparms);
if(statusparms.dwReturn==1)   str="单声道";
else str="双声道";
SetDlgItemText(IDC_CHANNELS,str);
str.Empty();
statusparms.dwItem=MCI_WAVE_STATUS_BITSPERSAMPLE;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
    (DWORD)(LPVOID)&statusparms);
str.Format("%d",statusparms.dwReturn);
str+="位";
SetDlgItemText(IDC_RESOLUTION,str);
str.Empty();
statusparms.dwItem=MCI_STATUS_LENGTH;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,
    (DWORD)(LPVOID)&statusparms);
str.Format("%d",int(statusparms.dwReturn/1000.0));
str+="秒";
SetDlgItemText(IDC_RESOLUTION,str);

}void CWAVEdlg::OnPlay() 
{
OnStop();
MCI_PLAY_PARMS playparms;
mciSendCommand(m_wDeviceID,MCI_SEEK,MCI_SEEK_TO_START,NULL);
if(mciSendCommand(m_wDeviceID,MCI_PLAY,NULL,(DWORD)(LPVOID)&playparms))
MessageBox("播放失败!");
}void CWAVEdlg::OnRecord() 
{
close();
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(FALSE);
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(FALSE);
MCI_OPEN_PARMS openparms;
openparms.lpstrDeviceType="waveaudio";
openparms.lpstrElementName="";
mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE|MCI_WAIT,
    (DWORD)(LPVOID)&openparms);
m_wDeviceID=openparms.wDeviceID;
MCI_RECORD_PARMS recordparms;
mciSendCommand(m_wDeviceID,MCI_RECORD,NULL,(DWORD)(LPVOID)&recordparms);
m_bRecording=TRUE;
m_bOpened=TRUE;

}void CWAVEdlg::OnSave() 
{
CFileDialog filedlg(FALSE,NULL,NULL,OFN_OVERWRITEPROMPT,"(*.wav)|*.wav|");
filedlg.m_ofn.lpstrDefExt="wav";
if(m_bRecording)
{
if(filedlg.DoModal()==IDOK)
{
CString path;
path=filedlg.GetPathName();
MCI_SAVE_PARMS saveparms;
saveparms.lpfilename=(LPCSTR)path;
if(mciSendCommand(m_wDeviceID,MCI_SAVE,MCI_SAVE_FILE|MCI_WAIT,
    (DWORD)(LPVOID)&saveparms))
return;
m_bRecording=FALSE;
}

}void CWAVEdlg::OnStop() 
{                                        //报错地方
mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL);
CWnd*m_pWnd;
m_pWnd=GetDlgItem(IDC_OPEN);
m_pWnd->EnableWindow(TRUE);
m_pWnd=GetDlgItem(IDC_PLAY);
m_pWnd->EnableWindow(TRUE);
if(m_bRecording)
{
m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(TRUE);
}

}BOOL CWAVEdlg::DestroyWindow() 
{                                        //报错地方
close();
return CDialog::DestroyWindow();
}BOOL CWAVEdlg::OnInitDialog() 
{                                         //报错地方
CDialog::OnInitDialog();
CWnd*m_pWnd;
    m_pWnd=GetDlgItem(IDC_SAVE);
m_pWnd->EnableWindow(FALSE);
    m_pWnd=GetDlgItem(IDC_PLAY);
    m_pWnd->EnableWindow(FALSE);
m_wDeviceID=0; m_bOpened=FALSE;  m_bRecording=FALSE;
return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}BOOL CWAVEdlg::Open(CString filename)
{                                           //报错地方
close();
MCI_OPEN_PARMS openparms;
openparms.lpstrDeviceType="waveaudio";
openparms.lpstrElementName=filename;
if(mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_OPEN_TYPE,
   (DWORD)(LPVOID)&openparms))
   return FALSE;
m_wDeviceID=openparms.wDeviceID;
m_bOpened=TRUE;
return TRUE;
}void CWAVEdlg::close()
{                                       //报错地方
   m_bRecording=FALSE;
   m_bOpened=FALSE;  
   if(m_wDeviceID)
   {
   mciSendCommand(m_wDeviceID,MCI_STOP,MCI_WAIT,NULL);
   mciSendCommand(m_wDeviceID,MCI_CLOSE,NULL,NULL);
   }
   m_wDeviceID=0;}

解决方案 »

  1.   

    看看E:\C++\VC实例\MyVC10\WAVEdlg.cpp(213) : fatal error C1004: unexpected end of file found这个错误的地方是不是少写了个"}"或有的地方用了CATCH(...)
      {
        ...
      }后面
      END_CATCH
      加上看看.
      

  2.   

    void CWAVEdlg::OnSave()  

    CFileDialog filedlg(FALSE,NULL,NULL,OFN_OVERWRITEPROMPT,"(*.wav) ¦*.wav ¦"); 
    filedlg.m_ofn.lpstrDefExt="wav"; 
    if(m_bRecording) 

    if(filedlg.DoModal()==IDOK) 

    CString path; 
    path=filedlg.GetPathName(); 
    MCI_SAVE_PARMS saveparms; 
    saveparms.lpfilename=(LPCSTR)path; 
    if(mciSendCommand(m_wDeviceID,MCI_SAVE,MCI_SAVE_FILE ¦MCI_WAIT, 
        (DWORD)(LPVOID)&saveparms)) 
    return; 
    m_bRecording=FALSE; 
    } } 
    //在这里再加上一个右化括号}
      

  3.   


    不用,它的问题就是'OnStop' 函数前面那个函数少了一个花括号,导致编译器以为是在函数中定义函数了,所以判定为非法的函数定义。