关于类,请大侠指教

muzhi 2004-04-30 11:21:56
#ifndef CONTROL_H
#define CONTROL_H
#include "Cursor.h"

class CEdit : public CObject
{
protected:
const BYTE m_MaxLen; // 最大输入的范围
const BYTE m_MinLen; // 最小输入的范围
const bool m_bIsPas; // 是否加密显示
BYTE m_Maxcur; // 在框内最多显示的字符数量
BYTE m_Pos; // 光标所在的字符位,0开始
BYTE m_Start; // 第一个显示的字符位,0开始
bool m_bSet; // 修改标记
border m_Border;
CUrsor * Cursor; // 光标
virtual int ProKey(int); // 基本键处理
public:
bool auto_end;
friend class CUrsor; // 友元光标类
CEdit(string & Text,int x,int y,int w,int h,CWindow * WIN=NULL);
CEdit(string & Text,CRect & R,CWindow * WIN=NULL);
virtual ~CEdit();
virtual bool GetFocus();
virtual bool LoseFocus();
virtual void Paint();
virtual int KeyEdit(); // 编辑事件
virtual bool DoModify() // 修改事件
{ m_bSet = false; return true; }

};
#endif


#ifndef CURSOR_H_
#define CURSOR_H_

#include "Control.h"

class CEdit;
extern possys *allsys;

class CUrsor
{
protected:
BYTE cur; // 光标当前位置
bool visible; // 光标显示状态
CEdit * E_Handle; // 单行编辑框指针
public:
CUrsor(CEdit *Handle, BYTE Cur=0, bool Visible=false)
: E_Handle(Handle), cur(Cur), visible(Visible)
{ if(visible) Display(); }
/*** 移动光标 */
void Move(const int Cur)
{
// 超过文本范围判断
if(Cur >= 0 && Cur < E_Handle->m_Maxcur)
{
BYTE oldvisible = visible;
Remove();
cur = Cur;
if(oldvisible) Display();
}
}
};

void CUrsor::Display()
{
setfillstyle(SOLID_FILL, WHITE);
int loc = cur * 8;
int Y = E_Handle->m_iTop + (E_Handle->GetHeight() -16) /2 ;
bar(E_Handle->m_iLeft+loc+2,Y-1,E_Handle->m_iLeft + loc + 9 ,Y + 17);
if(E_Handle->m_Start + cur < E_Handle->m_sText.length())
{
char ch[2] = { 0, 0 };
if(E_Handle->m_bIsPas) ch[0] = '*';
else
ch[0] = E_Handle->m_sText.get_at(E_Handle->m_Start+cur);
allsys->hzk.outtext(E_Handle->m_iLeft + loc + 2,Y,E_Handle-m_Color,ch);
}
visible = true;
}
#endif


错误显示:
Error:Cursor.h(31,3):'m_Maxcur' is not a member of 'CEdit'
Error:Cursor.h(77,26):'m_iTop' is not a member of 'CEdit'
Error:Cursor.h(77,50):'GetHeight' is not a member of 'CEdit'
Error:Cursor.h(79,23):'m_iLeft' is not a member of 'CEdit'
Error:Cursor.h(79,58):'m_iLeft' is not a member of 'CEdit'
Error:Cursor.h(81,22):'m_Start' is not a member of 'CEdit'
Error:Cursor.h(81,48):'m_sText' is not a member of 'CEdit'
Error:Cursor.h(84,25):'m_bIsPas' is not a member of 'CEdit'
Error:Cursor.h(87,29):'m_sText' is not a member of 'CEdit'
Error:Cursor.h(87,54):'m_Start' is not a member of 'CEdit'
Error:Cursor.h(89,40):'m_iLeft' is not a member of 'CEdit'
Error:Cursor.h(89,71):'m_Color' is not a member of 'CEdit'
Warn :Cursor.h(93,2):'loc' is assigned a value that is never used


请问怎么解决,是哪里的问题,编译环境borland c++5.0
...全文
59 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
muzhi 2004-05-04
  • 打赏
  • 举报
回复
CWindow是另一个类,CTitle是它的内部类如下形式
class CWindow
{
class CTitle
{
public:
string t_Text;
UINT t_Height;
align t_align;
UINT t_Txtclr; // 文本色
UINT t_Txtbkclr; // 背景色
CTitle(string &Text,UINT Height=20,align Align=CENTER,UINT
Tclr=BLACK,UINTBclr=WHITE)
: t_Height(Height), t_align(Align), t_Txtclr(Tclr), t_Txtbkclr(Bclr)
{ t_Text = Text;}
};
CTitle * m_Title;
void SetTitleName(stirng & Text){m_Title->t_Text=Text;} //CWindow.h(37,28)
};

Error:CWindow.h(37,28):) expected
iamfred 2004-05-02
  • 打赏
  • 举报
回复
你这个写的很乱,毛病也多,是从别的什么地方整来的~~楼主还是好好看看书再说吧
zouxueping 2004-05-02
  • 打赏
  • 举报
回复
CWindow.h又是哪来的,系统文件吗
flyelf 2004-04-30
  • 打赏
  • 举报
回复
把这些变量改为public
muzhi 2004-04-30
  • 打赏
  • 举报
回复
楼上的CObject和CEdit在同一个文件中定义的,只是没把贴出来
vcchunhong 2004-04-30
  • 打赏
  • 举报
回复
你在继承的时候出现了错误
class CEdit : public CObject
在这之前你没有向系统声明CObject这样一个类
所以它就不懂
所以你应该改成
class CObject;
class CEdit : public CObject
{
//.....................
};
这样就可以减少很多错误了~

muzhi 2004-04-30
  • 打赏
  • 举报
回复
另有两问请帮与解决
double GetNumber() { return atof(m_sText.c_str()); }
错误显示
Error:CONTROL.H(53,3):Structure required on left side of . or .*


class CTitle
{
public:
string t_Text;
UINT t_Height;
align t_align;
UINT t_Txtclr; // 文本色
UINT t_Txtbkclr; // 背景色
CTitle(string &Text,UINT Height=20,align Align=CENTER,UINT Tclr=BLACK,UINTBclr=WHITE)
: t_Height(Height), t_align(Align), t_Txtclr(Tclr), t_Txtbkclr(Bclr)
{ t_Text = Text;}
};

CTitle * m_Title;
void SetTitleName(stirng & Text){m_Title->t_Text=Text;}

Error:CWindow.h(37,28):) expected
yangliuseu 2004-04-30
  • 打赏
  • 举报
回复
同意 zouxueping(阿平)
zouxueping 2004-04-30
  • 打赏
  • 举报
回复
你这还有一个错误,就是两个文件互相包含了,都不用包含对方,加一句类声明就行了。
zouxueping 2004-04-30
  • 打赏
  • 举报
回复
最好给CEDIT类写一个函数取得你需要的变量的值,在类外直接操作一个对象的数据有违面向对象的封装思想。
muzhi 2004-04-30
  • 打赏
  • 举报
回复
楼上的将所有变量改成public后情况还是一样

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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