VC++,一个简单的画图软件

flyweiyu 2011-05-18 11:17:29
1>------ 已启动生成: 项目: sketcher, 配置: Debug Win32 ------
1>正在编译...
1>Element.cpp
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(13) : error C2600: “CElement::CElement”: 不能定义编译器生成的特殊成员函数(必须首先在类中声明)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(18) : error C2600: “CElement::~CElement”: 不能定义编译器生成的特殊成员函数(必须首先在类中声明)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(24) : error C2264: “CElement::CElement”: 函数定义或声明中有错误;未调用函数
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(24) : error C2264: “CElement::~CElement”: 函数定义或声明中有错误;未调用函数
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(26) : error C2144: 语法错误 : “void”的前面应有“)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(26) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(27) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(30) : error C2275: “CPoint”: 将此类型用作表达式非法
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atltypes.h(66) : 参见“CPoint”的声明
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(30) : error C2146: 语法错误 : 缺少“)”(在标识符“Start”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(30) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(30) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(32) : error C2144: 语法错误 : “void”的前面应有“)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(32) : error C2352: “CRectangle::~CRectangle”: 非静态成员函数的非法调用
1> f:\我的文档\2007315010115\sketcher\sketcher\element.h(21) : 参见“CRectangle::~CRectangle”的声明
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(32) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(33) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(36) : error C2275: “CPoint”: 将此类型用作表达式非法
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\atltypes.h(66) : 参见“CPoint”的声明
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(36) : error C2146: 语法错误 : 缺少“)”(在标识符“Start”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(36) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(36) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(38) : error C2144: 语法错误 : “void”的前面应有“)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(38) : error C2352: “CCircle::~CCircle”: 非静态成员函数的非法调用
1> f:\我的文档\2007315010115\sketcher\sketcher\element.h(27) : 参见“CCircle::~CCircle”的声明
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(38) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(39) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(42) : error C2275: “COLORREF”: 将此类型用作表达式非法
1> c:\program files\microsoft sdks\windows\v6.0a\include\windef.h(313) : 参见“COLORREF”的声明
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(42) : error C2146: 语法错误 : 缺少“)”(在标识符“aColor”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(42) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(42) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(42) : error C2601: “CCurve::Draw”: 本地函数定义是非法的
1> f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(24): 此行有一个“{”没有匹配项
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(44) : error C2144: 语法错误 : “void”的前面应有“)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(44) : error C2352: “CCurve::~CCurve”: 非静态成员函数的非法调用
1> f:\我的文档\2007315010115\sketcher\sketcher\element.h(33) : 参见“CCurve::~CCurve”的声明
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(44) : error C2059: 语法错误 : “)”
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(45) : error C2143: 语法错误 : 缺少“;”(在“{”的前面)
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(47) : error C2601: “CLine::Draw”: 本地函数定义是非法的
1> f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(24): 此行有一个“{”没有匹配项
1>f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(48) : fatal error C1075: 与左侧的 大括号“{”(位于“f:\我的文档\2007315010115\sketcher\sketcher\element.cpp(47)”)匹配之前遇到文件结束
1>sketcherView.cpp
1>f:\我的文档\2007315010115\sketcher\sketcher\sketcherview.cpp(110) : error C2653: “CSketcherView”: 不是类或命名空间名称
1>f:\我的文档\2007315010115\sketcher\sketcher\sketcherview.cpp(113) : error C2601: “CsketcherView::OnMouseMove”: 本地函数定义是非法的
1> f:\我的文档\2007315010115\sketcher\sketcher\sketcherview.cpp(110): 此行有一个“{”没有匹配项
1>f:\我的文档\2007315010115\sketcher\sketcher\sketcherview.cpp(117) : fatal error C1075: 与左侧的 大括号“{”(位于“f:\我的文档\2007315010115\sketcher\sketcher\sketcherview.cpp(113)”)匹配之前遇到文件结束
1>正在生成代码...
1>生成日志保存在“file://f:\我的文档\2007315010115\sketcher\sketcher\Debug\BuildLog.htm”
1>sketcher - 37 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

新人刚开始接触VC++,按书上的键入了一个程序,编译过程出的几个错误不知道怎么改,特别是那个大括号的那个,简直莫名其妙
...全文
267 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
flyweiyu 2011-05-18
  • 打赏
  • 举报
回复
以上是出错的两个CPP文件
flyweiyu 2011-05-18
  • 打赏
  • 举报
回复
// Element.cpp : 实现文件
//

#include "stdafx.h"
#include <cmath>
#include "sketcher.h"
#include "Element.h"


// CElement

CElement::CElement()
: m_pTempElement(NULL)
{
}

CElement::~CElement()
{
}


// CElement 成员函数

CLine::CLine(CPoint Start, CPoint End, COLORREF aColor)
{
m_StartPoint = Start;
m_EndPoint = End;
m_Color = aColor;
m_Pen = 1;
m_EnclosingRect = CRect(Start,End);
m_EnclosingRect.NormalizeRect();//NormalizeRect()用于确保矩形是规范化的,即无论直线起点和终点的相对位置如何,矩形的left值都小于或等于right值,top值小于或等于bottom值。
}


CLine::~CLine(void)
{
}

CRectangle::CRectangle(CPoint Start, CPoint End, COLORREF aColor)
{
m_Color = aColor;
m_Pen = 1;
m_EnclosingRect = CRect(Start,End);
m_EnclosingRect.NormalizeRect();
}


CRectangle::~CRectangle(void)
{
}

CCircle::CCircle(CPoint Start, CPoint End, COLORREF aColor)
{
long Radius = static_cast<long>(sqrt(
static_cast<double>((End.x-Start.x)*(End.x-Start.x)+
(End.y-Start.y)*(End.y-Start.y))));
m_EnclosingRect = CRect(Start.x-Radius,Start.y-Radius,
Start.x+Radius,Start.y+Radius);
m_Color = aColor;
m_Pen = 1;
}


CCircle::~CCircle(void)
{
}

CCurve::CCurve(COLORREF aColor)
{
m_Color = aColor;
m_EnclosingRect = CRect(0,0,0,0);
m_Pen = 1;
}
void CCurve::Draw(CDC *pDC)
{}


CCurve::~CCurve(void)
{
}
void CLine::Draw(CDC *pDC)
{
//创建画笔并初始化其颜色和线宽
CPen aPen;
if(!aPen.CreatePen(PS_SOLID,m_Pen,m_Color))
{
AfxMessageBox(_T("画笔创建失败"),MB_OK);
AfxAbort();
}
CPen* pOldPen = pDC->SelectObject(&aPen);//选择画笔
//现在开始绘制
pDC->MoveTo(m_StartPoint);
pDC->LineTo(m_EndPoint);
pDC->SelectObject(pOldPen);//恢复旧画笔
}
CRect CElement::GetBoundRect()
{
CRect BoundingRect; //存储边界矩形
BoundingRect = m_EnclosingRect; //存储封闭矩形
BoundingRect.InflateRect(m_Pen,m_Pen);//加上画笔宽度
return BoundingRect;//返回边界矩形
}
void CRectangle::Draw(CDC* pDC)
{
CPen aPen;
if(!aPen.CreatePen(PS_SOLID,m_Pen,m_Color))
{
AfxMessageBox(_T("画笔创建失败"),MB_OK);
AfxAbort();
}
CPen* pOldPen = pDC->SelectObject(&aPen);
CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
pDC->Rectangle(m_EnclosingRect);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
}
void CCircle::Draw(CDC *pDC)
{
CPen aPen;
if(!aPen.CreatePen(PS_SOLID,m_Pen,m_Color))
{
AfxMessageBox(_T("画笔创建失败"),MB_OK);
AfxAbort();
}
CPen* pOldPen = pDC->SelectObject(&aPen);
CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);
pDC->Ellipse(m_EnclosingRect);
pDC->SelectObject(pOldBrush);
pDC->SelectObject(pOldPen);
}


// sketcherView.cpp : CsketcherView 类的实现
//

#include "stdafx.h"
#include "sketcher.h"
#include "Element.h"
#include "sketcherDoc.h"
#include "sketcherView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CsketcherView

IMPLEMENT_DYNCREATE(CsketcherView, CView)

BEGIN_MESSAGE_MAP(CsketcherView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CView::OnFilePrintPreview)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
END_MESSAGE_MAP()

// CsketcherView 构造/析构

CsketcherView::CsketcherView()
: m_FirstPoint(CPoint(0,0))
{
// TODO: 在此处添加构造代码

}

CsketcherView::~CsketcherView()
{
}

BOOL CsketcherView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式

return CView::PreCreateWindow(cs);
}

// CsketcherView 绘制

void CsketcherView::OnDraw(CDC* /*pDC*/)
{
CsketcherDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;

// TODO: 在此处为本机数据添加绘制代码
}


// CsketcherView 打印

BOOL CsketcherView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}

void CsketcherView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加额外的打印前进行的初始化过程
}

void CsketcherView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 添加打印后进行的清理过程
}


// CsketcherView 诊断

#ifdef _DEBUG
void CsketcherView::AssertValid() const
{
CView::AssertValid();
}

void CsketcherView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}

CsketcherDoc* CsketcherView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CsketcherDoc)));
return (CsketcherDoc*)m_pDocument;
}
#endif //_DEBUG


// CsketcherView 消息处理程序

void CsketcherView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_FirstPoint = point;
}

void CSketcherView::OnLButtonUp(UINT nFlags, CPoint point)
{
//确保存在一个元素
if(m_pTempElement)
{
//调用一个文档类函数来存储元素
//在文档对象中指向该元素
delete m_pTempElement;//删除旧元素
m_pTempElement = 0;//对指针复位
}
}


void CsketcherView::OnMouseMove(UINT nFlags, CPoint point)
{
void CSketcherView::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC aDC(this);//创建设备环境
aDC.SetROP2(R2_NOTXORPEN); // 设置绘制模式
if(nFlags & MK_LBUTTON)
{
m_SecondPoint = point; //保存到当前光标位置
f(m_pTempElement)//测试是否有旧元素
{
m_pTempElement->Draw(&aDC);//如果有,处理鼠标移动
delete m_pTempElement;//删除旧元素
m_pTempElement = 0;//对指针复位
}

m_pTempElement = CreateElement();//创建新元素
m_pTempElement->Draw(&aDC);//绘制元素
}
}

}
//创建新元素
CElement* CSketcherView::CreateElement(void)
{
// 获取指向文档的指针
CSketcherDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); // 验证指针是否有效
// 选择要创建的元素
switch(pDoc->GetElementType())
{
case LINE:
return new CLine(m_FirstPoint, m_SecondPoint,
pDoc->GetElementColor());
case RECTANGLE:
return new CRectangle(m_FirstPoint, m_SecondPoint,
pDoc->GetElementColor());
case CIRCLE:
return new CCircle(m_FirstPoint, m_SecondPoint,
pDoc->GetElementColor());
case CURVE:
return new CCurve(pDoc->GetElementColor());
default:
// 报错
AfxMessageBox(_T("没有该元素"), MB_OK);
AfxAbort();
return NULL;
}

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧