如何在vc的类中定义一个返回struct的函数
我如下定义,可是总报错:
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




