回 帖 发 新 帖 刷新版面

主题:[讨论]error LNK2005该如何解决呢?

我在对话框上放置了3个组合框
组合框测试Dlg.h内class CMyDlg : public CDialog中增加了:
CComboBox *pCombox1;
CComboBox *pCombox2;
CComboBox *pCombox3;
以及在组合框测试Dlg.h内增加了:
int Combo1_index;
int Combo2_index;
int Combo3_index;
其它在组合框测试Dlg.cpp中做了如下改动:
在OnInitDialog()添加了如下代码:
    pCombox1 = (CComboBox*)GetDlgItem(IDC_COMBO1);
    pCombox2 = (CComboBox*)GetDlgItem(IDC_COMBO2);
    pCombox3 = (CComboBox*)GetDlgItem(IDC_COMBO3);

    pCombox1 -> ResetContent();
    pCombox1 -> AddString("1");
    pCombox1 -> AddString("2");
    pCombox1 -> SetCurSel(0);

    pCombox2 -> ResetContent();
    pCombox2 -> AddString("3");
    pCombox2 -> AddString("4");
    pCombox2 -> SetCurSel(0);

    GetDlgItem(IDC_COMBO3) -> EnableWindow(false);

    Combo1_index = pCombox1 -> GetCurSel();
在OnSelchangeCombo1()中添加:
Combo1_index = pCombox1 -> GetCurSel();

    switch(Combo1_index)
    {
    case 0:
        pCombox2 -> ResetContent();
        pCombox2 -> AddString("1");
        pCombox2 -> AddString("2");
        pCombox2 -> SetCurSel(0);
        break;
    case 1:
        pCombox2 -> ResetContent();
        pCombox2 -> AddString("5");
        pCombox2 -> AddString("6");
        pCombox2 -> SetCurSel(0);
        break;
    default:
        break;
    }

可是编译以后出现错误:
--------------------Configuration: 组合框测试 - Win32 Debug--------------------
Compiling...
组合框测试.cpp
Generating Code...
Compiling...
组合框测试Dlg.cpp
Generating Code...
Linking...
组合框测试Dlg.obj : error LNK2005: "int Combo1_index" (?Combo1_index@@3HA) already defined in 组合框测试.obj
组合框测试Dlg.obj : error LNK2005: "int Combo2_index" (?Combo2_index@@3HA) already defined in 组合框测试.obj
组合框测试Dlg.obj : error LNK2005: "int Combo3_index" (?Combo3_index@@3HA) already defined in 组合框测试.obj
Debug/组合框测试.exe : fatal error LNK1169: one or more multiply defined symbols found
执行 link.exe 时出错.

组合框测试.exe - 1 error(s), 0 warning(s)

因为刚刚学习VC++,不知道怎么解决,请各位高人指导一下该怎么修改呢???
注:工程文件在附件里。

回复列表 (共3个回复)

沙发

//你把成员变量申明在类外了,改成这样就好了[em16]
// 组合框测试Dlg.h : header file
//

#if !defined(AFX_DLG_H__286EFD5F_0E9B_42EF_815C_CAFD2F32B5BD__INCLUDED_)
#define AFX_DLG_H__286EFD5F_0E9B_42EF_815C_CAFD2F32B5BD__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

/////////////////////////////////////////////////////////////////////////////
// CMyDlg dialog

class CMyDlg : public CDialog
{
// Construction
public:
    CMyDlg(CWnd* pParent = NULL);    // standard constructor

    CComboBox *pCombox1;
    CComboBox *pCombox2;
    CComboBox *pCombox3;
    int Combo1_index;
    int Combo2_index;
    int Combo3_index;
// Dialog Data
    //{{AFX_DATA(CMyDlg)
    enum { IDD = IDD_MY_DIALOG };
        // NOTE: the ClassWizard will add data members here
    //}}AFX_DATA

    // ClassWizard generated virtual function overrides
    //{{AFX_VIRTUAL(CMyDlg)
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
    //}}AFX_VIRTUAL

// Implementation
protected:
    HICON m_hIcon;

    // Generated message map functions
    //{{AFX_MSG(CMyDlg)
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnSelchangeCombo1();
    //}}AFX_MSG
    DECLARE_MESSAGE_MAP()
};



//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_DLG_H__286EFD5F_0E9B_42EF_815C_CAFD2F32B5BD__INCLUDED_)

板凳

是呀,我试过了,在类内或者在.cpp文件里前面声明都可以,可是:为什么不能在头文件里声明呢?

3 楼

我去图书馆找了资料,有的说全局变量在头文件里声明,有的说在.cpp文件里前面声明,有什么区别吗?

我来回复

您尚未登录,请登录后再回复。点此登录或注册