Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Visual C++ / MFC / WTL > MFC, Sketcher


Автор: MDmitry 13.02.11, 03:15
Доброго времени суток, читаю книгу Хортона. Приложение Sketcher, думаю многие её читали. Не могу понять где ошибка

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    CSketcherDoc::CSketcherDoc(): m_Element(LINE), m_Color(BLACK): m_Element(0)
    {
        // TODO: add one-time construction code here
    }


1>c:\users\администратор\documents\visual studio 2005\projects\sketcher\sketcher\sketcherdoc.cpp(42) : error C2601: 'CSketcherDoc::OnNewDocument' : local function definitions are illegal

Автор: ElcnU 13.02.11, 05:58
похоже на функцию в функции .... на 42й строке
покажи что там в окрестностях

Автор: MDmitry 13.02.11, 16:56
Класс документа

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    // SketcherDoc.h : interface of the CSketcherDoc class
    //
     
     
    #pragma once
     
    class CSketcherDoc : public CDocument
    {
    protected: // create from serialization only
        CSketcherDoc();
        DECLARE_DYNCREATE(CSketcherDoc)
     
    // Attributes
    public:
     
    // Operations
    public:
     
    // Overrides
    public:
        virtual BOOL OnNewDocument();
        virtual void Serialize(CArchive& ar);
     
    // Implementation
    public:
        virtual ~CSketcherDoc();
    #ifdef _DEBUG
        virtual void AssertValid() const;
        virtual void Dump(CDumpContext& dc) const;
    #endif
     
    protected:
      unsigned int m_Element;
      COLORREF m_Color; // Текущий цвет рисования
     
    // Generated message map functions
    protected:
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnColorBlack();
        afx_msg void OnColorRed();
        afx_msg void OnColorGreen();
        afx_msg void OnColorBlue();
        afx_msg void OnElementLine32779();
        afx_msg void OnElementRectangle();
        afx_msg void OnElementCircle();
        afx_msg void OnElementCurbe();
        
    };
     
    // SketcherDoc.cpp : implementation of the CSketcherDoc class
    //
     
    #include "stdafx.h"
    #include "Sketcher.h"
     
    #include "SketcherDoc.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
    // CSketcherDoc
     
    IMPLEMENT_DYNCREATE(CSketcherDoc, CDocument)
     
    BEGIN_MESSAGE_MAP(CSketcherDoc, CDocument)
        ON_COMMAND(ID_COLOR_BLACK, &CSketcherDoc::OnColorBlack)
        ON_COMMAND(ID_COLOR_RED, &CSketcherDoc::OnColorRed)
        ON_COMMAND(ID_COLOR_GREEN, &CSketcherDoc::OnColorGreen)
        ON_COMMAND(ID_COLOR_BLUE, &CSketcherDoc::OnColorBlue)
        ON_COMMAND(ID_ELEMENT_LINE32779, &CSketcherDoc::OnElementLine32779)
        ON_COMMAND(ID_ELEMENT_RECTANGLE, &CSketcherDoc::OnElementRectangle)
        ON_COMMAND(ID_ELEMENT_CIRCLE, &CSketcherDoc::OnElementCircle)
        ON_COMMAND(ID_ELEMENT_CURBE, &CSketcherDoc::OnElementCurbe)
    END_MESSAGE_MAP()
     
     
    // CSketcherDoc construction/destruction
     
    CSketcherDoc::CSketcherDoc(): m_Element(LINE), m_Color(BLACK): m_Element(0)
    {
        // TODO: add one-time construction code here
    }
     
    CSketcherDoc::~CSketcherDoc()
    {
    }
     
    BOOL CSketcherDoc::OnNewDocument()
    {
        if (!CDocument::OnNewDocument())
            return FALSE;
     
        // TODO: add reinitialization code here
        // (SDI documents will reuse this document)
     
        return TRUE;
    }
     
     
     
     
    // CSketcherDoc serialization
     
    void CSketcherDoc::Serialize(CArchive& ar)
    {
        if (ar.IsStoring())
        {
            // TODO: add storing code here
        }
        else
        {
            // TODO: add loading code here
        }
    }
     
     
    // CSketcherDoc diagnostics
     
    #ifdef _DEBUG
    void CSketcherDoc::AssertValid() const
    {
        CDocument::AssertValid();
    }
     
    void CSketcherDoc::Dump(CDumpContext& dc) const
    {
        CDocument::Dump(dc);
    }
    #endif //_DEBUG
     
     
    // CSketcherDoc commands
     
    void CSketcherDoc::OnColorBlack()
    {
      m_Color=BLACK;
    }
     
    void CSketcherDoc::OnColorRed()
    {
        // TODO: Add your command handler code here
    }
     
    void CSketcherDoc::OnColorGreen()
    {
        // TODO: Add your command handler code here
    }
     
    void CSketcherDoc::OnColorBlue()
    {
      m_Element=LINE;
    }
     
    void CSketcherDoc::OnElementLine32779()
    {
        // TODO: Add your command handler code here
    }
     
    void CSketcherDoc::OnElementRectangle()
    {
        // TODO: Add your command handler code here
    }
     
    void CSketcherDoc::OnElementCircle()
    {
        // TODO: Add your command handler code here
    }
     
    void CSketcherDoc::OnElementCurbe()
    {
        // TODO: Add your command handler code here
    }

Автор: ElcnU 13.02.11, 17:26
Цитата MDmitry @
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    CSketcherDoc::CSketcherDoc(): m_Element(LINE), m_Color(BLACK):  m_Element(0)

двоеточие лишнее
нужно запятую

Автор: MDmitry 13.02.11, 18:51
не могу понять в чём ошибка

класс документа с добавлениями

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    // SketcherDoc.h : interface of the CSketcherDoc class
    //
     
     
    #pragma once
     
     
    class CSketcherDoc : public CDocument
    {
    protected: // create from serialization only
        CSketcherDoc();
        DECLARE_DYNCREATE(CSketcherDoc)
     
    // Attributes
    public:
     
    // Operations
    public:
     
    // Overrides
    public:
        virtual BOOL OnNewDocument();
        virtual void Serialize(CArchive& ar);
     
    // Implementation
    public:
        virtual ~CSketcherDoc();
    #ifdef _DEBUG
        virtual void AssertValid() const;
        virtual void Dump(CDumpContext& dc) const;
    #endif
     
    protected:
     
    // Generated message map functions
    protected:
        DECLARE_MESSAGE_MAP()
    public:
        afx_msg void OnElementLine();
    public:
        afx_msg void OnElementRectengle();
    public:
        afx_msg void OnElementCircle();
    public:
        afx_msg void OnElementCurve();
    public:
        afx_msg void OnColorBlack();
    public:
        afx_msg void OnColorRed();
    public:
        afx_msg void OnColorGreen();
    public:
        afx_msg void OnColorBlue();
    protected:
        unsigned int m_Element;   // Текущий тип элемента
        COLORREF m_Color;         // Текущий цвет
    };
     
    // SketcherDoc.cpp : implementation of the CSketcherDoc class
    //
     
    #include "stdafx.h"
    #include "Sketcher.h"
     
    #include "SketcherDoc.h"
     
    #ifdef _DEBUG
    #define new DEBUG_NEW
    #endif
     
     
    // CSketcherDoc
     
    IMPLEMENT_DYNCREATE(CSketcherDoc, CDocument)
     
    BEGIN_MESSAGE_MAP(CSketcherDoc, CDocument)
        ON_COMMAND(ID_ELEMENT_LINE, &CSketcherDoc::OnElementLine)
        ON_COMMAND(ID_ELEMENT_RECTENGLE, &CSketcherDoc::OnElementRectengle)
        ON_COMMAND(ID_ELEMENT_CIRCLE, &CSketcherDoc::OnElementCircle)
        ON_COMMAND(ID_ELEMENT_CURVE, &CSketcherDoc::OnElementCurve)
        ON_COMMAND(ID_COLOR_BLACK, &CSketcherDoc::OnColorBlack)
        ON_COMMAND(ID_COLOR_RED, &CSketcherDoc::OnColorRed)
        ON_COMMAND(ID_COLOR_GREEN, &CSketcherDoc::OnColorGreen)
        ON_COMMAND(ID_COLOR_BLUE, &CSketcherDoc::OnColorBlue)
    END_MESSAGE_MAP()
     
    // CSketcherDoc construction/destruction
    CSketcherDoc::CSketcherDoc(): m_Element(LINE),m_Color(BLACK)
    {
        // TODO: add one-time construction code here
    }
     
    CSketcherDoc::~CSketcherDoc()
    {
    }
     
    BOOL CSketcherDoc::OnNewDocument()
    {
        if (!CDocument::OnNewDocument())
            return FALSE;
     
        // TODO: add reinitialization code here
        // (SDI documents will reuse this document)
     
        return TRUE;
    }
     
    // CSketcherDoc serialization
     
    void CSketcherDoc::Serialize(CArchive& ar)
    {
        if (ar.IsStoring())
        {
            // TODO: add storing code here
        }
        else
        {
            // TODO: add loading code here
        }
    }
     
     
    // CSketcherDoc diagnostics
     
    #ifdef _DEBUG
    void CSketcherDoc::AssertValid() const
    {
        CDocument::AssertValid();
    }
     
    void CSketcherDoc::Dump(CDumpContext& dc) const
    {
        CDocument::Dump(dc);
    }
    #endif //_DEBUG
     
     
    // CSketcherDoc commands
     
    void CSketcherDoc::OnElementLine()
    {
      m_Element=LINE;
    }
     
    void CSketcherDoc::OnElementRectengle()
    {
      m_Element=RECTANGLE;
    }
     
    void CSketcherDoc::OnElementCircle()
    {
      m_Element=CIRCLE;
    }
     
    void CSketcherDoc::OnElementCurve()
    {
      m_Element=CURVE;
    }
     
    void CSketcherDoc::OnColorBlack()
    {
      m_Color=BLACK;
    }
     
    void CSketcherDoc::OnColorRed()
    {
      m_Color=RED;
    }
     
    void CSketcherDoc::OnColorGreen()
    {
      m_Color=GREEN;
    }
     
    void CSketcherDoc::OnColorBlue()
    {
      m_Color=BLUE;
    }



Файл с константами

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    #pragma once
     
    const unsigned int LINE=1010;
    const unsigned int RECTANGLE=1020;
    const unsigned int CIRCLE=1030;
    const unsigned int CURVE=1040;
     
    const COLORREF BLACK=RGB(0,0,0);
    const COLORREF RED=RGB(255,0,0);
    const COLORREF GREEN=RGB(0,255,0);
    const COLORREF BLUE=RGB(0,0,255);


Ошибка 1>Sketcher.obj : error LNK2001: unresolved external symbol "public: virtual bool __thiscall CWinApp::OnIdle(long)" (?OnIdle@CWinApp@@UAE_NJ@Z)

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)