qszchew 发表于 2009-9-16 11:11:00

请教大虾们(Objectarx)程序错误应该如何解决?

<p><strong>请教大虾们(Objectarx)程序错误应该如何解决?</strong></p><p><strong>程序如下:</strong></p><p>#include&lt;iostream.h&gt;<br/>#include "StdAfx.h"<br/>#include "StdArx.h"<br/>#include "dbpl.h"<br/>#include "acedads.h"<br/>#include "dbents.h" <br/>#include "dbsymtb.h"<br/>#include&nbsp; &lt;string.h&gt; </p><p></p><p>// This is command 'ADDPOLYDYNAMIC'<br/>void ZffCHAP5AddPolyDynamic()<br/>{<br/>&nbsp;<br/>&nbsp;// TODO: Implement the command<br/>&nbsp;ads_real GetWidth() <br/>&nbsp;{ <br/>&nbsp;&nbsp;ads_real width = 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (acedGetReal("\n输入线宽:", &amp;width) == RTNORM) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return width; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else <br/>&nbsp;&nbsp;{<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; <br/>&nbsp;&nbsp;} <br/>&nbsp;}</p><p>&nbsp;int GetColorIndex() <br/>&nbsp;{ <br/>&nbsp;&nbsp;int colorIndex = 0; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (acedGetInt("\n输入颜色索引值(0~256):", &amp;colorIndex) !=RTNORM) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; <br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 处理颜色索引值无效的情况 <br/>&nbsp;&nbsp;while (colorIndex &lt; 0 || colorIndex &gt; 256) <br/>&nbsp;&nbsp;{ <br/>&nbsp;&nbsp;&nbsp;acedPrompt("\n输入了无效的颜色索引."); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (acedGetInt("\n输入颜色索引值(0~256):", &amp;colorIndex) !=RTNORM) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return 0; <br/>&nbsp;&nbsp;} <br/>&nbsp;&nbsp;return colorIndex; <br/>&nbsp;} </p><p><br/>}<br/>// This is command 'ADDPOLY'<br/>void ZffCHAP5AddPoly()<br/>{<br/>&nbsp;// TODO: Implement the command<br/>&nbsp;int colorIndex = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 颜色索引值 <br/>&nbsp;&nbsp;&nbsp; ads_real width = 0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 多段线的线宽 <br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp; int index = 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 当前输入点的次数 <br/>&nbsp;&nbsp;&nbsp; ads_point ptStart;&nbsp;&nbsp; // 起点 <br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp; // 提示用户输入起点 <br/>&nbsp;&nbsp;&nbsp; if (acedGetPoint(NULL, "\n输入第一点:", ptStart) != RTNORM) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; ads_point ptPrevious, ptCurrent; <br/>&nbsp;&nbsp;&nbsp;&nbsp; acdbPointSet(ptStart, ptPrevious); <br/>&nbsp;&nbsp;&nbsp;&nbsp; AcDbObjectId polyId;&nbsp;&nbsp;&nbsp; // 多段线的ID <br/>&nbsp; <br/>&nbsp;&nbsp;&nbsp; // 输入第二点 <br/>&nbsp;&nbsp;&nbsp;&nbsp; acedInitGet(NULL, "W C O"); <br/>&nbsp;&nbsp;&nbsp;&nbsp; int rc = acedGetPoint(ptPrevious,"\n输入下一点 [宽度(W)/颜色(C)]&lt;完成(O)&gt;:", ptCurrent); <br/>&nbsp;&nbsp;&nbsp;&nbsp; while (rc == RTNORM || rc == RTKWORD) <br/>&nbsp; { <br/>&nbsp;&nbsp; if (rc == RTKWORD)&nbsp;&nbsp;&nbsp; // 如果用户输入了关键字 <br/>&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp; char kword; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (acedGetInput(kword) != RTNORM) <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (strcmp(kword, "W") == 0)<br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp; width=GetWidth();&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (strcmp(kword, "C") == 0) <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp; colorIndex=GetColorIndex(); <br/>&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (strcmp(kword, "O") == 0) <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp; return; <br/>&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp; else <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp; acutPrintf("\n无效的关键字."); <br/>&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp; } <br/>&nbsp;&nbsp; else if (rc == RTNORM)&nbsp; // 用户输入了点 <br/>&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp; if (index == 2) <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp; // 创建多段线 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcDbPolyline *pPoly=new AcDbPolyline(2); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcGePoint2d ptGe1, ptGe2; // 两个节点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptGe1=ptPrevious; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptGe1=ptPrevious; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptGe2=ptCurrent; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptGe2=ptCurrent; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;addVertexAt(0, ptGe1); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;addVertexAt(1, ptGe2); <br/>&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 修改多段线的颜色和线宽 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;setConstantWidth(width); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;setColorIndex(colorIndex); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 添加到模型空间 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; polyId=PostToModelSpace(pPoly);<br/>&nbsp;&nbsp;&nbsp; } </p><p>&nbsp;&nbsp;&nbsp; else if (index &gt; 2) <br/>&nbsp;&nbsp;&nbsp; { <br/>&nbsp;&nbsp;&nbsp;&nbsp; // 修改多段线,添加最后一个顶点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcDbPolyline *pPoly; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acdbOpenObject(pPoly, polyId, AcDb::kForWrite); <br/>&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; AcGePoint2d ptGe;&nbsp;&nbsp; // 增加的节点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptGe = ptCurrent; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ptGe = ptCurrent;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;addVertexAt(index - 1, ptGe); <br/>&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp; // 修改多段线的颜色和线宽 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;setConstantWidth(width); <br/>&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;setColorIndex(colorIndex); <br/>&nbsp;&nbsp;&nbsp;&nbsp; pPoly-&gt;close(); <br/>&nbsp;&nbsp;&nbsp; } <br/>&nbsp;&nbsp;&nbsp; index++; <br/>&nbsp;&nbsp;&nbsp;&nbsp; acdbPointSet(ptCurrent, ptPrevious); <br/>&nbsp;&nbsp; } <br/>&nbsp;&nbsp; // 提示用户输入新的节点 <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; acedInitGet(NULL,"W C O"); <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; rc=acedGetPoint(ptPrevious,"\n输入下一点 [宽度(W)/颜色(C)]&lt;完成(O)&gt;:",ptCurrent); <br/>&nbsp; }&nbsp; <br/>}</p><p>错误如下:</p><p>--------------------Configuration: AddPolyDynamic - Win32 Debug--------------------<br/>Compiling...<br/>AddPolyDynamicCommands.cpp<br/>&nbsp;&nbsp;&nbsp;&nbsp; Compiling STL header files in release mode.<br/>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(20) : error C2601: 'GetWidth' : local function definitions are illegal<br/>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(33) : error C2601: 'GetColorIndex' : local function definitions are illegal<br/>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(80) : error C2065: 'GetWidth' : undeclared identifier<br/>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(84) : error C2065: 'GetColorIndex' : undeclared identifier<br/>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(114) : error C2065: 'PostToModelSpace' : undeclared identifier<br/>执行 cl.exe 时出错.</p><p>ZffAddPolyDynamic.arx - 1 error(s), 0 warning(s)<br/></p><p></p><p></p><p></p>

luowy 发表于 2009-9-17 02:06:00

<p>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(20) : error C2601: 'GetWidth' : local function definitions are illegal</p><p>本地函数定义非法</p><p><br/>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(33) : error C2601: 'GetColorIndex' : local function definitions are illegal<br/>本地函数定义非法</p><p>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(80) : error C2065: 'GetWidth' : undeclared identifier<br/>未定义的识别符,(因为函数原型非法)</p><p>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(84) : error C2065: 'GetColorIndex' : undeclared identifier<br/>同上</p><p>D:\TEST\AddPolyDynamic\AddPolyDynamicCommands.cpp(114) : error C2065: 'PostToModelSpace' : undeclared identifier<br/>同上</p><p>lz不仅对arx不理解,连vc++的编译环境也不了解,对C++也不懂,如此仓促上阵,是要遇到许多问题的,楼主还是先看看vc++的编译,弄几个教程,再来搞arx吧~~</p>

qszchew 发表于 2009-9-17 20:26:00

谢谢,小弟受教!
页: [1]
查看完整版本: 请教大虾们(Objectarx)程序错误应该如何解决?