不能实例化抽象类什么意思

不住隔壁的老王 2011-08-07 04:37:20
IMPLEMENT_DYNCREATE(COrderView, CRecordView)
问题的代码

H文件
#pragma once

class COrderSet;
class CDBSampleDoc;

class COrderView:public CRecordView
{
DECLARE_DYNCREATE(COrderView)

protected:
virtual ~COrderView(){}
virtual void DoDataExchange(CDataExchange* pDX);
virtual void OnInitialUpdate();

public:
enum{ IDD = IDD_ORDERS_FORM };
COrderSet* m_pSet;

CDBSampleDoc* GetDocument() const
{
return reinterpret_cast<CDBSampleDoc*>(m_pDocument);
}
COrderSet* GetRecordSet();
COrderView();

#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};


CPP文件
#include "stdafx.h"
#include "DBSample.h"

#include "OrderSet.h"
#include "DBSampleDoc.h"
#include "OrderView.h"

IMPLEMENT_DYNCREATE(COrderView, CRecordView)

COrderView::COrderView()
: CRecordView(COrderView::IDD),m_pSet(NULL)
{

// TODO: 在此处添加构造代码

}

void COrderView::DoDataExchange(CDataExchange* pDX)
{
CRecordView::DoDataExchange(pDX);
// 可以在此处插入 DDX_Field* 函数以将控件“连接”到数据库字段,例如
// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet->m_szColumn1, m_pSet);
// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet->m_bColumn2, m_pSet);
// 有关更多信息,请参阅 MSDN 和 ODBC 示例
DDX_FieldText(pDX,IDC_ORDERID,m_pSet ->m_OrderDetailsOrderID,m_pSet);
DDX_FieldText(pDX,IDC_CUSTOMERID,m_pSet ->m_OrdersCustomerID,m_pSet);
DDX_FieldText(pDX,IDC_PRODUCTID,m_pSet ->m_OrderDetailsProductID,m_pSet);
DDX_FieldText(pDX,IDC_QUANTITY,m_pSet ->m_OrderDetailsQuantity,m_pSet);

}


#ifdef _DEBUG
void COrderView::AssertValid() const
{
CRecordView::AssertValid();
}

void COrderView::Dump(CDumpContext& dc) const
{
CRecordView::Dump(dc);
}
#endif

COrderset* COrderView::GetRecordset()
{
ASSERT(m_pSet != NULL);
return m_pSet;
}

CRecordset* COrderView::OnGetRecordset()
{
return m_pSet;
}
...全文
2073 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
coderguang 2014-04-23
  • 打赏
  • 举报
回复
引用 7 楼 zzw820626 的回复:
[Quote=引用 6 楼 smwhotjay 的回复:] 那个类还有虚函数未实现。所以无法实例化 [/Quote] ++
虚函数不一定都要实现,但是纯虚函数必须实现!
shiyunqiang 2011-08-08
  • 打赏
  • 举报
回复
抽象类里面含有纯虚函数,只能在子类中实现,所以不能实例化。
zzw820626 2011-08-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 smwhotjay 的回复:]
那个类还有虚函数未实现。所以无法实例化
[/Quote]
++
smwhotjay 2011-08-08
  • 打赏
  • 举报
回复
那个类还有虚函数未实现。所以无法实例化
xiaojunjun1202 2011-08-08
  • 打赏
  • 举报
回复
CRecordset 是抽象滴
youngwolf 2011-08-08
  • 打赏
  • 举报
回复
应该是简单错误,比如说,你贴的这些代码,可能不是真正编译的代码。
这样的低级错误每人都会犯,而且不容易想到。
  • 打赏
  • 举报
回复
1>------ 已启动生成: 项目: DBSample, 配置: Debug Win32 ------
1>正在编译...
1>OrderView.cpp
1>d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.cpp(8) : error C2259: “COrderView”: 不能实例化抽象类
1> 由于下列成员:
1> “CRecordset *CRecordView::OnGetRecordset(void)”: 是抽象的
1> c:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxdb.h(1072) : 参见“CRecordView::OnGetRecordset”的声明
1>d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.cpp(45) : error C2039: “GetRecordset”: 不是“COrderView”的成员
1> d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.h(6) : 参见“COrderView”的声明
1>d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.cpp(47) : error C2065: “m_pSet”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.cpp(48) : error C2065: “m_pSet”: 未声明的标识符
1>d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.cpp(52) : error C2509: “OnGetRecordset”: 成员函数没有在“COrderView”中声明
1> d:\my documents\visual studio 2008\projects\dbsample\dbsample\orderview.h(6) : 参见“COrderView”的声明
1>生成日志保存在“file://d:\My Documents\Visual Studio 2008\Projects\DBSample\DBSample\Debug\BuildLog.htm”
1>DBSample - 5 个错误,0 个警告
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========
  • 打赏
  • 举报
回复
可是另一个CPP就没有出错啊
// CProductSet.cpp : CProductSet 类的实现
//

#include "stdafx.h"
#include "DBSample.h"
#include "CProductSet.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CProductSet 实现

// 代码生成在 2011年8月5日 星期五, 12:32

IMPLEMENT_DYNAMIC(CProductSet, CRecordset)

CProductSet::CProductSet(CDatabase* pdb)
: CRecordset(pdb)
{
m_ProductID = 0;
m_ProductName = L"";
m_SupplierID = 0;
m_CategoryID = 0;
m_QuantityPerUnit = L"";
m_UnitPrice = 0.0;
m_UnitsInStock = 0;
m_UnitsOnOrder = 0;
m_ReorderLevel = 0;
m_Discontinued = FALSE;
m_nFields = 10;
m_nDefaultType = snapshot;
}
//#error 安全问题:连接字符串可能包含密码。
// 此连接字符串中可能包含明文密码和/或其他重要
// 信息。请在查看完此连接字符串并找到所有与安全
// 有关的问题后移除 #error。可能需要将此密码存
// 储为其他格式或使用其他的用户身份验证。
CString CProductSet::GetDefaultConnect()
{
return _T("DSN=Northwind;DBQ=D:\\Northwind.mdb;DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;UID=admin;");
//return _T("ODBC;");//自己选择数据源
}

CString CProductSet::GetDefaultSQL()
{
return _T("[Products]");
}

void CProductSet::DoFieldExchange(CFieldExchange* pFX)
{
pFX->SetFieldType(CFieldExchange::outputColumn);
// RFX_Text() 和 RFX_Int() 这类宏依赖的是
// 成员变量的类型,而不是数据库字段的类型。
// ODBC 尝试自动将列值转换为所请求的类型
RFX_Long(pFX, _T("[ProductID]"), m_ProductID);
RFX_Text(pFX, _T("[ProductName]"), m_ProductName);
RFX_Long(pFX, _T("[SupplierID]"), m_SupplierID);
RFX_Long(pFX, _T("[CategoryID]"), m_CategoryID);
RFX_Text(pFX, _T("[QuantityPerUnit]"), m_QuantityPerUnit);
RFX_Double(pFX, _T("[UnitPrice]"), m_UnitPrice);
RFX_Int(pFX, _T("[UnitsInStock]"), m_UnitsInStock);
RFX_Int(pFX, _T("[UnitsOnOrder]"), m_UnitsOnOrder);
RFX_Int(pFX, _T("[ReorderLevel]"), m_ReorderLevel);
RFX_Bool(pFX, _T("[Discontinued]"), m_Discontinued);

}
/////////////////////////////////////////////////////////////////////////////
// CProductSet 诊断

#ifdef _DEBUG
void CProductSet::AssertValid() const
{
CRecordset::AssertValid();
}

void CProductSet::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG

Eleven 2011-08-07
  • 打赏
  • 举报
回复
抽象类不能实例化,地球人都知道了~

16,471

社区成员

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

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

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