我在一个函数里定义了一个变量i,希望每调用一次这个函数,i可以加一,就做了i++。
现在我又要在另一个函数中调用这个变量。
如何定义这个i呢?

解决方案 »

  1.   

    static int i=0;
    i=i++;
    是这样吗?
    但是我在另一个函数中调用着个i的时候,没有成功啊?
      

  2.   

    看你两个函数是不是在同一个c文件中,如果在同一个文件中就直接int i就行了,如果不在,要在头文件里定义,然后包含
      

  3.   

    在同一个cpp文件中,我在函数外面做了 static int i=0;
    在第一个函数中做了 i=i++;
    在调用i的函数中直接调用i
    但是没有成功啊。
    有什么问题吗
      

  4.   

    static int k=0;
    void CSale::OnAddsale() 
    {
    // TODO: Add your control notification handler code here
       k=k++;
    m_pDateTime1=CTime::GetCurrentTime();
    m_SaleDate=m_pDateTime1.Format("%Y.%m.%d   %H:%M:%S"); 
    if ( ""==m_pGoodNum1)
    {
    AfxMessageBox(_T("请输入零件号"), MB_ICONEXCLAMATION);
            return;
    }    else if( ""==m_pSaleTotal)
    {
    AfxMessageBox(_T("请输入数量"), MB_ICONEXCLAMATION);
            return;
    }  else  if( ""==m_pCompany)
    {
    AfxMessageBox(_T("请输入销售商"), MB_ICONEXCLAMATION);
            return;



    _variant_t Holder, strQuery;
        

    try
    {   
    strQuery = "INSERT INTO sale VALUES('"+m_pGoodNum1+"','"+m_pInvPrice+"','"+m_pUnitPrice+"','"+m_pSaleTotal+"','"+m_pSaleSum+"','"+m_pSaleInv+"','"+m_pCompany+"','"+m_SaleDate+"')";
    theApp.ADOExecute(theApp.m_pRecordset, strQuery);
    }
    catch(_com_error& e)
        {
            AfxMessageBox(e.ErrorMessage());
    return;
        }    
    RefreshData();
    }
    void CSale::RefreshData()
    {    m_pSaleList.DeleteAllItems();
    m_pSaleList.SetRedraw(FALSE);
        DWORD style=m_pSaleList.GetExtendedStyle();
             m_pSaleList.SetExtendedStyle(style|LVS_EX_GRIDLINES);    
    m_pSaleList.InsertItem(k, m_pGoodNum1);
    m_pSaleList.SetItemText(k, 1, m_pInvPrice); m_pSaleList.SetItemText(k, 2, m_pUnitPrice); m_pSaleList.SetItemText(k, 3, m_pSaleTotal); m_pSaleList.SetItemText(k, 4, m_pSaleSum); m_pSaleList.SetItemText(k, 5, m_pSaleInv); m_pSaleList.SetItemText(k, 6, m_pCompany); m_pSaleList.SetItemText(k, 7, m_SaleDate);
    m_pSaleList.SetRedraw(TRUE);
    }
    代码有点问题,我不知道怎么把数据插入到特定的某一行,但是,这样定义"k",确实有问题
      

  5.   

    RefreshData()只插入了一行数据,因为你先DeleteAllItem()了。
      

  6.   

    RefreshData()后列表中只有一行数据。
      

  7.   

    我这样运行,他每次都只能插入一行数据,而且,只有第一列的数据可以插入进去,其他的都是空的。但是我在RefreshData函数中做:int k=0;,这样我就可以完整的插入一行数据,这是不是说明我以前的k没有调用成功?
      

  8.   

    我把DeleteAllItem()删除了也没有用
      

  9.   

    只能说明你的k调用成功了。k是静态的,所以它的值保留着
    int i = m_pSaleList.InsertItem(k, m_pGoodNum1);
    //试图插入第k行(可能没有k行),返回实际插入位置
    m_pSaleList.SetItemText(i, 1, m_pInvPrice);
    m_pSaleList.SetItemText(i, 2, m_pUnitPrice);
    m_pSaleList.SetItemText(i, 3, m_pSaleTotal);
    m_pSaleList.SetItemText(i, 4, m_pSaleSum);
    m_pSaleList.SetItemText(i, 5, m_pSaleInv);
    m_pSaleList.SetItemText(i, 6, m_pCompany);
    m_pSaleList.SetItemText(i, 7, m_SaleDate);
      

  10.   

    真的很感谢  lfchen(一条晚起的虫)  解决了我的一个难题