-2

我是 C++ 新手,我用 MS Visual C++ 创建了一个单文档界面应用程序。当我编译它时,在名为 Day10 SDIDOC.h 的头文件中出现了一些错误,如下所示

error C2143: syntax error : missing ';' before '*'
error C2501: 'CLine' : missing storage-class or type specifiers
error C2501: 'GetLine' : missing storage-class or type specifiers
error C2143: syntax error : missing ';' before '*'
error C2501: 'CLine' : missing storage-class or type specifiers
error C2501: 'AddLine' : missing storage-class or type specifiers

我的文件是

第 10 天 SDIDOC.h

public:
CLine * GetLine(int nIndex);
int GetLineCount();
CLine * AddLine(CPoint ptFrom,CPoint ptTo);
CObArray m_oaLines;
virtual ~CDay10SDIDoc();
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif

这些 GetLine() 和 AddLine() 方法在 Day10 SDIDOC.cpp 中像这样实现

Day10 SDIDOC.cpp

CLine * CDay10SDIDoc::AddLine(CPoint ptFrom, CPoint ptTo)
{
//create a new CLine Object
CLine *pLine = new CLine(ptFrom,ptTo);

try
{
   //Add the new line to the object array
m_oaLines.Add(pLine);

   //Mark the document as dirty(unsaved)
   SetModifiedFlag();
 }
//Did we run into a memory exception ?
 catch(CMemoryException* perr)
{
   //Display a message for the user,giving the bad new
   AfxMessageBox("Out of Memory",MB_ICONSTOP|MB_OK);

   //Did we create a line object?
   if(pLine)
   {
   //Delete it
   delete pLine;
    pLine = NULL;
   }
   //delete the exception object
 perr->Delete();
}
  return pLine;
  }

和 GetLine 方法

CLine * CDay10SDIDoc::GetLine(int nIndex)
{
return (CLine*) m_oaLines[nIndex];

}

我不明白有什么问题。请给我一个解决方案。谢谢...

4

1 回答 1

1

看来您的编译器在解析这两个函数时看不到声明。CLine因此,它不知道该名称是什么,因此会出错。

您可以通过将标头包含到定义中CLine或仅在顶部添加前向声明Day10 SDIDOC.h并将标头包含在 cpp 文件中来解决此问题。前向声明就足够了,因为您仅使用指向对象的指针CLine而不定义CLine对象或在标题中以任何方式使用其定义。

于 2013-01-02T04:53:54.597 回答