为了建立全局变量,照着网上的方法建立了一个PublicUse类实现全局变量~~结果就出了这种连接错误~~1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: void __thiscall CKeyboardDlg::OnEnChangeEdit1(void)" (?OnEnChangeEdit1@CKeyboardDlg@@QAEXXZ)
1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int PublicUse::getrow" (?getrow@PublicUse@@2HA)
1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int PublicUse::getline" (?getline@PublicUse@@2HA)
1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int (* PublicUse::A)[4]" (?A@PublicUse@@2PAY03HA)
1>PublicUse.obj : error LNK2001: 无法解析的外部符号 "public: static int (* PublicUse::A)[4]" (?A@PublicUse@@2PAY03HA)
1>C:\Users\acer\Documents\Visual Studio 2010\Projects\Keyboard\Debug\Keyboard.exe : fatal error LNK1120: 4 个无法解析的外部命令
1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int PublicUse::getrow" (?getrow@PublicUse@@2HA)
1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int PublicUse::getline" (?getline@PublicUse@@2HA)
1>KeyboardDlg.obj : error LNK2001: 无法解析的外部符号 "public: static int (* PublicUse::A)[4]" (?A@PublicUse@@2PAY03HA)
1>PublicUse.obj : error LNK2001: 无法解析的外部符号 "public: static int (* PublicUse::A)[4]" (?A@PublicUse@@2PAY03HA)
1>C:\Users\acer\Documents\Visual Studio 2010\Projects\Keyboard\Debug\Keyboard.exe : fatal error LNK1120: 4 个无法解析的外部命令
解决方案 »
- 代码调试通过不了,请哪位高手给个调试好的代码,多谢了。
- 谁能发份RTC 1.2,1.3到偶的邮箱,或提供个可下载的链接也行
- 书上说最好让线程自然结束,那请问::_endthreadex函数该如何使用?
- VC6.0下splitpath不能用吗?
- 界面为什么改不了啊?
- 程序初使化时,任务栏中的图标的问题。
- 关于高级断点问题,有谁能帮帮我
- 字符数组问题????
- error C2146: syntax error : missing ')' before identifier 'SetWindowTextA' 这是什么错误?!
- 简单的ADO问题(一定给分)
- 请问怎么把界面下类视图隐藏掉啊,如图
- 这种错误我只在汇编里遇到过——连接错误,大虾留下你们的邮箱,我快没分了,求救~~
{
DECLARE_DYNCREATE(PublicUse)protected:
PublicUse(); // 动态创建所使用的受保护的构造函数
virtual ~PublicUse();public:
virtual BOOL InitInstance();
virtual int ExitInstance();
static int Line[4];
static int A[4][4];
static int Row;
static char ASC[4][4];
static int *p[4];
static int getline;
static int getrow;
protected:
DECLARE_MESSAGE_MAP()
};
/ PublicUse.cpp : 实现文件
//#include "stdafx.h"
#include "Keyboard.h"
#include "PublicUse.h"
// PublicUseIMPLEMENT_DYNCREATE(PublicUse, CWinApp)PublicUse::PublicUse()
{
}PublicUse::~PublicUse()
{
}BOOL PublicUse::InitInstance()
{
// TODO: 在此执行任意逐线程初始化
return TRUE;
}int PublicUse::ExitInstance()
{
// TODO: 在此执行任意逐线程清理
return CWinApp::ExitInstance();
}BEGIN_MESSAGE_MAP(PublicUse, CWinApp)
END_MESSAGE_MAP()
// PublicUse 消息处理程序
int *PublicUse::p[4]={ PublicUse::A[0],PublicUse::A[1], PublicUse::A[2], PublicUse::A[3]};
int PublicUse::Line[4]={1,1,1,1};
int PublicUse::Row=0;
char PublicUse::ASC[4][4]={'1','2','3','4','5','6','7','8','A','B','C','D','E','F','G','H'};
#include "Keyboard.h"
#include "KeyboardDlg.h"
#include "afxdialogex.h"
#define NoneInput 100#ifdef _DEBUG
#define new DEBUG_NEW
#endif
void InitMatrix(int **X,int n){
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
X[i][j]=0;
}void InitL(int L[],int k,int n){
for(int i=0;i<n;i++) L[i]=1;
L[k]=0;}
int IfOut0(int **X,int p,int n,int L[]){
for(int j=0;j<n;j++)
if(!L[p]&&X[p][j]) {
PublicUse::Row=j;
return 1;}
return 0;
}
int Scan(int **X,int L[],int n){
for(int i=0;i<n;i++){
i=i%4;
InitL(L,i,4);
if(IfOut0(X,i,n,L)) return i;
}
return NoneInput;
}
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();// 对话框数据
enum { IDD = IDD_ABOUTBOX }; protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持// 实现
protected:
DECLARE_MESSAGE_MAP()
};CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CKeyboardDlg 对话框
CKeyboardDlg::CKeyboardDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CKeyboardDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}void CKeyboardDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CKeyboardDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON() ON_BN_CLICKED(B1, &CKeyboardDlg::OnBnClickedB1)
ON_BN_CLICKED(B2, &CKeyboardDlg::OnBnClickedB2)
ON_BN_CLICKED(B4, &CKeyboardDlg::OnBnClickedB4)
ON_STN_CLICKED(Txt, &CKeyboardDlg::OnStnClickedTxt)
ON_BN_CLICKED(B3, &CKeyboardDlg::OnBnClickedB3)
ON_BN_CLICKED(B8, &CKeyboardDlg::OnBnClickedB8)
ON_BN_CLICKED(B5, &CKeyboardDlg::OnBnClickedB5)
ON_BN_CLICKED(B6, &CKeyboardDlg::OnBnClickedB6)
ON_BN_CLICKED(B7, &CKeyboardDlg::OnBnClickedB7)
ON_BN_CLICKED(B9, &CKeyboardDlg::OnBnClickedB9)
ON_BN_CLICKED(B10, &CKeyboardDlg::OnBnClickedB10)
ON_BN_CLICKED(B11, &CKeyboardDlg::OnBnClickedB11)
ON_BN_CLICKED(B12, &CKeyboardDlg::OnBnClickedB12)
ON_BN_CLICKED(B13, &CKeyboardDlg::OnBnClickedB13)
ON_BN_CLICKED(B14, &CKeyboardDlg::OnBnClickedB14)
ON_BN_CLICKED(B15, &CKeyboardDlg::OnBnClickedB15)
ON_BN_CLICKED(B16, &CKeyboardDlg::OnBnClickedB16)
ON_STN_CLICKED(OutPut, &CKeyboardDlg::OnStnClickedOutput)
ON_EN_CHANGE(IDC_EDIT1, &CKeyboardDlg::OnEnChangeEdit1)
END_MESSAGE_MAP()
// CKeyboardDlg 消息处理程序BOOL CKeyboardDlg::OnInitDialog()
{
CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
} // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}void CKeyboardDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。void CKeyboardDlg::OnPaint()
{
if (IsIconic())
{
}
else
{ CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标
dc.FillSolidRect(&rect,RGB(0x55,0x6B,0x2F));
dc.DrawIcon(x, y, m_hIcon);
CDialogEx::OnPaint();
}
}//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CKeyboardDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CKeyboardDlg::OnBnClickedB1()
{
// TODO: 在此添加控件通知处理程序代码
InitMatrix( PublicUse::p,4);
PublicUse::A[0][0]=1;
PublicUse::getline=Scan( PublicUse::p, PublicUse::Line,4);
PublicUse::getrow= PublicUse::Row;
}
void CKeyboardDlg::OnBnClickedB2()
{ // TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB3()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB4()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB5()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB6()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB7()
{
// TODO: 在此添加控件通知处理程序代码
}void CKeyboardDlg::OnBnClickedB8()
{
// TODO: 在此添加控件通知处理程序代码
}void CKeyboardDlg::OnBnClickedB9()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB10()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB11()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB12()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB13()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB14()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB15()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnBnClickedB16()
{
// TODO: 在此添加控件通知处理程序代码
}void CKeyboardDlg::OnStnClickedTxt()
{
// TODO: 在此添加控件通知处理程序代码
}
void CKeyboardDlg::OnStnClickedOutput()
{
// TODO: 在此添加控件通知处理程序代码
}
你在KeyboardDl.cpp里删了,但在KeyboardDl.h头文件里没有删除它的声明会出现“无法解析的外部符号”这种错误。
再就是楼上说的,没有引入lib或DLL库文件。