CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

如何在vc的类中定义一个返回struct的函数

楼主matrix2000(我要学InfoPath)2000-09-28 01:04:00 在 VC/MFC / 基础类 提问

我如下定义,可是总报错:  
  editmap.h  
   
  class   CMapEdit   ...  
  {  
       
      public:  
      struct   LINESTRU  
      {  
            int   x;  
            int   y;  
            char   [20];  
        };  
         
        struct   LINESTRU   *   GetLine(char   ID[]);  
        ...  
   
  editmap.cpp  
   
      struct   LINESTRU   *   GetLine(char   ID[])  
    {  
       
      }  
   
  错误如下:  
  Compiling...  
  MapEdit.cpp  
  D:\vc\editmap\MapEdit.cpp(1500)   :   error   C2556:   'struct   LINESTRU   *__thiscall   CMapEdit::GetLine(char   [])'   :   overloaded   function   differs   only   by   return   type   from   'struct   CMapEdit::LINESTRU   *__thiscall   CMapEdit::GetLine(char   [])'  
                  d:\vc\editmap\mapedit.h(173)   :   see   declaration   of   'GetLine'  
  D:\vc\editmap\MapEdit.cpp(1500)   :   error   C2371:   'GetLine'   :   redefinition;   different   basic   types  
                  d:\vc\editmap\mapedit.h(173)   :   see   declaration   of   'GetLine'  
  Generating   Code...  
  Compiling...  
  editmap.cpp  
  Generating   Code...  
  Skipping...   (no   relevant   changes   detected)  
  editmapView.cpp  
  LineEdit.cpp  
  MainFrm.cpp  
  MapToolBar.cpp  
  Error   executing   cl.exe.  
  Creating   browse   info   file...  
   
  editmap.exe   -   2   error(s),   0   warning(s)  
   
  请指点,谢。 问题点数:50、回复次数:9Top

1 楼dwbclz(dw编程浪子)回复于 2000-09-28 07:35:00 得分 15

首先要说明的是,你应该给出完整的程序,从这部分不能完全确定错误所在。  
   
  LINESTRU应该是错误的所在之处,它是在类CMapEdit   中定义的,它的名称只能在这里面直接  
  引用,如果想在类外引用它的名称,应该是   CMapEdit::LINESTRU。  
  错误有可能是这样的,如果你给出源程序,我就可以确定了。  
   
  欢迎来我的主页看看:  
  http://dwbclz.myetang.com  
  这里讲述了最新的汇编优化理论,  
  和时下流行的一些指令集:SSE,3DNow  
  Top

2 楼bigjim(飞翔鸟)回复于 2000-09-28 08:37:00 得分 20

实现形式应该是这样的:  
  CMapEdit::LINESTRU   *   CMapEdit::GetLine(char   ID[])       //...(1)  
  因为它与LINESTRU   *   GetLine(char   ID[])     //.........(2)  
  只有返回类型不一样,所以才会有上述错误。把cpp中的函数改为(1)的形式就可以了。  
   
  Top

3 楼lgs(老臭虫)回复于 2000-09-28 12:47:00 得分 15

同意bigjim的回答。  
   
  函数返回的结果为结构体指针不妥,Microsft推荐的方法是将返回结果的结构体指针作为函数的参数来保存结果,如下:  
   
  MFC的CComboBoxEx::GetItem()函数的例子:  
  BOOL   GetItem(COMBOBOXEXITEM*   pCBItem   );  
   
  UINT   GetLine(char   ID[],LINESTRU   *   LineStru);  
  UINT   CMapEdit::GetLine(char   ID[],CMapEdit::LINESTRU   *   LineStru)  
  {  
          ...  
  }  
  Top

4 楼lgs(老臭虫)回复于 2000-09-28 12:58:00 得分 0

同意bigjim的观点。  
   
  Microsoft不推荐函数返回一个结构体地址,而是将结构体作为函数的参数传递,如MFC的例子:  
  CComboBoxEx::GetItem()  
  BOOL   GetItem(   COMBOBOXEXITEM*   pCBItem   );  
  而建议改为:  
  UINT   GetLine(char   ID[],LINESTRU   *   LineStru);  
  UINT   CMapEdit::GetLine(char   ID[],CMapEdit::LINESTRU   *   LineStru)    
  的形式。  
  Top

5 楼lgs(老臭虫)回复于 2000-09-28 13:13:00 得分 0

Sorry!帖多了。Top

6 楼matrix2000(我要学InfoPath)回复于 2000-09-28 13:56:00 得分 0

dwbclz和bigjim都指出了错误的所在,就是说不可以直接用类中的结构体做函数的返回值,而应该将类名和类中的结构体全写全才可以,我将之改完后,一切OK。同时lgs的回帖对我帮助也很大,我会将我的代码改成lgs推荐的样子。  
  谢谢各位。  
  10.1将至,祝各位Happy.Top

相关问题

  • 在vc中怎样定义全局变量和全局函数????
  • vc,全局变量,全局函数,在哪里定义啊?
  • Access模块里定义的函数,在VC里能不能用?
  • 为什么VC中报错:不允许 dllimport 函数 的定义 ??
  • 为什么VC中报错:不允许 dllimport 函数 的定义 ??
  • 为什么VC中报错:不允许 dllimport 函数 的定义 ??
  • 自定义函数
  • 自定义函数
  • 自定义函数
  • 自定义函数

关键词

  • 函数
  • 结构
  • vc
  • cpp
  • linestru
  • cmapedit
  • editmap
  • getline
  • mapedit
  • bigjim

得分解答快速导航

  • 帖主:matrix2000
  • dwbclz
  • bigjim
  • lgs

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo