求助帖,急,Debug/LEMORT.exe : fatal error LNK1120: 2 unresolved externals

阿勒。 2015-11-23 02:30:37
Duty.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall ADOConn::~ADOConn(void)" (??1ADOConn@@UAE@XZ)

Duty.obj : error LNK2001: unresolved external symbol "public: __thiscall ADOConn::ADOConn(void)" (??0ADOConn@@QAE@XZ)

Debug/LEMORT.exe : fatal error LNK1120: 2 unresolved externals
用的VC++6.0可以编译 但是运行就会有这个错误
...全文
192 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
阿勒。 2015-11-23
  • 打赏
  • 举报
回复
引用 7楼我是你的主体 的回复:
[quote=引用 6楼信阳毛尖 的回复:][quote=引用 5 楼 qq_32889795 的回复:] 本人菜鸟,在哪里定义,怎么定义啊,非常非常感谢
你不要被我说的话给吓着了呀 .h文件中声明,.cpp中定义 在与void ADOConn::OnInitADOConn()这个函数定义的cpp文件中定义呀

ADOConn::ADOConn()
{
}

ADOConn::~ADOConn()
{
}
或者你直接写在.h中,即声明与定义写在一起:

// ADOConn.h : header file
//
class ADOConn  
{
//定义变量
public:
_ConnectionPtr m_pConnection;//添加一个指向connection的指针
_RecordsetPtr m_pRecordset;//定义一个指向Recordset的指针
//定义方法
public:
ADOConn()
{
}
virtual ~ADOConn()
{
}

void OnInitADOConn();//初始化一连接数据库
_RecordsetPtr& GetRecordSet(bstr_t bstrSQL);//执行查询
    BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
[/quote]多谢。[/quote]我试试看去。
阿勒。 2015-11-23
  • 打赏
  • 举报
回复
引用 6楼信阳毛尖 的回复:
[quote=引用 5 楼 qq_32889795 的回复:] 本人菜鸟,在哪里定义,怎么定义啊,非常非常感谢
你不要被我说的话给吓着了呀 .h文件中声明,.cpp中定义 在与void ADOConn::OnInitADOConn()这个函数定义的cpp文件中定义呀

ADOConn::ADOConn()
{
}

ADOConn::~ADOConn()
{
}
或者你直接写在.h中,即声明与定义写在一起:

// ADOConn.h : header file
//
class ADOConn  
{
//定义变量
public:
_ConnectionPtr m_pConnection;//添加一个指向connection的指针
_RecordsetPtr m_pRecordset;//定义一个指向Recordset的指针
//定义方法
public:
ADOConn()
{
}
virtual ~ADOConn()
{
}

void OnInitADOConn();//初始化一连接数据库
_RecordsetPtr& GetRecordSet(bstr_t bstrSQL);//执行查询
    BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
[/quote]多谢。
信阳毛尖 2015-11-23
  • 打赏
  • 举报
回复
引用 5 楼 qq_32889795 的回复:
本人菜鸟,在哪里定义,怎么定义啊,非常非常感谢
你不要被我说的话给吓着了呀 .h文件中声明,.cpp中定义 在与void ADOConn::OnInitADOConn()这个函数定义的cpp文件中定义呀

ADOConn::ADOConn()
{
}

ADOConn::~ADOConn()
{
}
或者你直接写在.h中,即声明与定义写在一起:

// ADOConn.h : header file
//
class ADOConn  
{
//定义变量
public:
_ConnectionPtr m_pConnection;//添加一个指向connection的指针
_RecordsetPtr m_pRecordset;//定义一个指向Recordset的指针
//定义方法
public:
ADOConn()
{
}
virtual ~ADOConn()
{
}

void OnInitADOConn();//初始化一连接数据库
_RecordsetPtr& GetRecordSet(bstr_t bstrSQL);//执行查询
    BOOL ExecuteSQL(_bstr_t bstrSQL);
void ExitConnect();
};
阿勒。 2015-11-23
  • 打赏
  • 举报
回复
本人菜鸟,在哪里定义,怎么定义啊,非常非常感谢
信阳毛尖 2015-11-23
  • 打赏
  • 举报
回复
你这命名规则真是奇葩,一个class ADOConn,一个class CADOConn,搞得我都稀里糊涂看混淆了..... CADOConn从CDialog派生,你就不会命名为CADOConnDlg嘛
信阳毛尖 2015-11-23
  • 打赏
  • 举报
回复
class ADOConn的构造函数和析构函数定义一下,你声明了没定义啊
阿勒。 2015-11-23
  • 打赏
  • 举报
回复
ADOConn.h #import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF") rename("BOF","adoBOF") #if !defined(AFX_ADOCONN_H__4B71D891_1B20_49B5_80CF_8324D5F56037__INCLUDED_) #define AFX_ADOCONN_H__4B71D891_1B20_49B5_80CF_8324D5F56037__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // ADOConn.h : header file // class ADOConn { //定义变量 public: _ConnectionPtr m_pConnection;//添加一个指向connection的指针 _RecordsetPtr m_pRecordset;//定义一个指向Recordset的指针 //定义方法 public: ADOConn(); virtual ~ADOConn(); void OnInitADOConn();//初始化一连接数据库 _RecordsetPtr& GetRecordSet(bstr_t bstrSQL);//执行查询 BOOL ExecuteSQL(_bstr_t bstrSQL); void ExitConnect(); }; ///////////////////////////////////////////////////////////////////////////// // CADOConn dialog class CADOConn : public CDialog { // Construction public: CADOConn(CWnd* pParent = NULL); // standard constructor // Dialog Data //{{AFX_DATA(CADOConn) enum { IDD = IDD_LEMORT_DIALOG }; // NOTE: the ClassWizard will add data members here //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CADOConn) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: // Generated message map functions //{{AFX_MSG(CADOConn) // NOTE: the ClassWizard will add member functions here //}}AFX_MSG DECLARE_MESSAGE_MAP() }; //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_ADOCONN_H__4B71D891_1B20_49B5_80CF_8324D5F56037__INCLUDED_) ADOConn.cpp // ADOConn.cpp : implementation file // #include "stdafx.h" #include "LEMORT.h" #include "ADOConn.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CADOConn dialog //成员方法的实现--OnInitADOConn() void ADOConn::OnInitADOConn() { ::CoInitialize(NULL);//初始化环境 try {//创建connection对像 m_pConnection.CreateInstance("ADODB.Connection"); /*bstr_t strConnect="Provider=SQLOLEDBr;Password=sa;Persist Securityinfo=True;User ID=sa;Initial Catalog=StudentInfo;Data Source=localhost"; m_pConnection->Open(strConnect,"","",adModeUnknown);*/ //直接连接数据库 _bstr_t strConnect="DSN=Student;Provider=MSDASQL"; //通过ODBC数据源连接数据库 m_pConnection->Open(strConnect,"sa","sa", adConnectUnspecified); } catch(_com_error e) { AfxMessageBox(e.Description()); } } //成员方法的实现--GetRecordSet(_bstr_t bstrSQL) _RecordsetPtr& ADOConn::GetRecordSet(_bstr_t bstrSQL) { try{//连接数据库,如果Connection对象为空,则重新连接数据库 if(m_pConnection==NULL) OnInitADOConn(); //创建记录集对象 m_pRecordset.CreateInstance(_uuidof(Recordset)); //取得表中的记录 m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic, adLockOptimistic,adCmdText); } //捕捉异常 catch(_com_error e) { //显示错误信息 AfxMessageBox(e.Description()); } return m_pRecordset;//返回记录集 } //成员方法的实现--ExecuteSQL(_bstr_t bstrSQL) BOOL ADOConn::ExecuteSQL(_bstr_t bstrSQL) { try{//是否已经连接数据库 if(m_pConnection==NULL) OnInitADOConn(); m_pConnection->Execute(bstrSQL,NULL,adCmdText); return true; } catch(_com_error e) { AfxMessageBox(e.Description()); return false; } } //成员方法的实现--ExitConnect() void ADOConn::ExitConnect() { //关闭记录集和连接 if(m_pRecordset==NULL) m_pRecordset->Close(); m_pConnection->Close(); //释放环境 ::CoUninitialize(); } CADOConn::CADOConn(CWnd* pParent /*=NULL*/) : CDialog(CADOConn::IDD, pParent) { //{{AFX_DATA_INIT(CADOConn) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT } void CADOConn::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CADOConn) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CADOConn, CDialog) //{{AFX_MSG_MAP(CADOConn) // NOTE: the ClassWizard will add message map macros here //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CADOConn message handlers
阿勒。 2015-11-23
  • 打赏
  • 举报
回复
相关代码 有文件Duty.h // Duty.h: interface for the CDuty class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_DUTY_H__EF32DBC7_77A7_4AF1_9B4A_CCA0287679FB__INCLUDED_) #define AFX_DUTY_H__EF32DBC7_77A7_4AF1_9B4A_CCA0287679FB__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 class CDuty {//成员变量定义 private: CString Zhiwuleibieid; CString Zhiwu; CString Zhigongfenlei; public: //成员函数定义 public: CDuty(); virtual ~CDuty(); CString getZhiwuleibieid(); void setZhiwuleibieid(CString cZhiwuleibieid); CString getZhiwu(); void setZhiwu(CString cZhiwu); CString getZhigongfenlei(); void setZhigongfenlei(CString cZhigongfenlei); void GetDuty(CString cZhiwu); void sql_insert(CString cZhiwuleibieid); void sql_delete(CString cZhiwuleibieid); void sql_update(CString cZhiwuleibieid); }; #endif // !defined(AFX_DUTY_H__EF32DBC7_77A7_4AF1_9B4A_CCA0287679FB__INCLUDED_) Duty.cpp // Duty.cpp: implementation of the CDuty class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "LEMORT.h" #include "Duty.h" #include "ADOConn.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CDuty::CDuty() { Zhiwuleibieid =""; Zhiwu = ""; Zhigongfenlei = ""; } CDuty::~CDuty() { } CString CDuty::getZhiwuleibieid() { return Zhiwuleibieid; } void CDuty::setZhiwuleibieid(CString cZhiwuleibieid) { Zhiwuleibieid=cZhiwuleibieid; } CString CDuty::getZhiwu() { return Zhiwu; } void CDuty::setZhiwu(CString cZhiwu) { Zhiwu=cZhiwu; } CString CDuty::getZhigongfenlei() { return Zhigongfenlei; } void CDuty::setZhigongfenlei(CString cZhigongfenlei) { Zhigongfenlei=cZhigongfenlei; } //根据姓名获取所有字段 void CDuty::GetDuty(CString cZhiwu) { //连接数据库 ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); //设置SELECT语句 _bstr_t vSQL; vSQL = "SELECT * FROM Duty WHERE Zhiwu=" + cZhiwu; //执行SELETE语句 _RecordsetPtr m_pRecordset; m_pRecordset = m_AdoConn.GetRecordSet(vSQL); //返回各列的值 if (m_pRecordset->adoEOF) CDuty(); else { Zhiwu = cZhiwu; Zhiwuleibieid = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Zhiwuleibieid"); Zhigongfenlei = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect("Zhigongfenlei"); } //断开与数据库的连接 m_AdoConn.ExitConnect(); } //插入 void CDuty::sql_insert(CString cZhiwuleibieid) { //连接数据库 ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); //设置INSERT语句 _bstr_t vSQL; vSQL="INSERT INTO Duty(Zhiwuleibieid, Zhiwu, Zhigongfenlei) VALUES('"+ Zhiwuleibieid + "','" + Zhiwu + "','" + Zhigongfenlei + "')"; //执行INSERT语句 m_AdoConn.ExecuteSQL(vSQL); //断开与数据库的连接 m_AdoConn.ExitConnect(); } //删除 void CDuty::sql_delete(CString cZhiwuleibieid) { //连接数据库 ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); //设置DELETE语句 _bstr_t vSQL; vSQL = "DELETE FROM Duty WHERE Zhiwuleibieid=" + cZhiwuleibieid; //执行DELETE语句 m_AdoConn.ExecuteSQL(vSQL); //断开与数据库的连接 m_AdoConn.ExitConnect(); } //更新 void CDuty::sql_update(CString cZhiwuleibieid) { //连接数据库 ADOConn m_AdoConn; m_AdoConn.OnInitADOConn(); _bstr_t vSQL; vSQL = "UPDATE Duty SET Zhiwuleibieid='" + Zhiwuleibieid + "', Zhiwu='"+Zhiwu+"',Zhigongfenlei='"+Zhigongfenlei+ "' where Zhiwuleibieid="+cZhiwuleibieid; //执行update语句 m_AdoConn.ExecuteSQL(vSQL); //断开与数据库的连接 m_AdoConn.ExitConnect(); }

16,548

社区成员

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

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

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