unresolved external symbol "protected: unsigned char __thiscall CPersonalParameProc::ReadPersonalPsw(unsigned char const * *)const " (?ReadPersonalPsw@CPersonalParameProc@@IBEEPAPBE@Z)
Debug/KTS.exe : fatal error LNK1120: 1 unresolved externalsCPersonalParameProc 這個類是我自己編寫的類. ReadPersonalPsw(unsigned char const * *)const  這個函數定義為inline . 這裡有個問題, 如果該函數的實現寫在.h 裡面, 能夠編譯通過. 如果寫在.cpp文件裡面. 編譯通不過.錯誤如上面.該問題困擾我好久. 不知道什麼原因.因為在我自己寫的類裡面. 這個問題不是會一直存在. 而是經常出現.  大家探討一下. 是不是有什麼條件使用inline . 開始的時候我乾脆就在.h裡面完成. 但是現在我這個類有100多個這樣的inline 小函數. 寫在.h裡面實在不美觀. 這裡先謝謝大家了. 講到一點道理的得分.

解决方案 »

  1.   

    inline 函数应该写在.h文件里面
      

  2.   

    但是有時可以寫在cpp中, 關注ing
      

  3.   

    但是我也可以寫在cpp 裡面啊.... 其實我程序裡面大多數inline 都寫在cpp裡面. 比如我的CListCtrlEx :public CListCtrl . 這裡就不會有問題.
      

  4.   

    在.h中定义成static,在.cpp中用inline。有个网友给我发的程序中就是这么写的。
      

  5.   

    class A{
    public :
    inline void proc();
    };
    inline void A::proc()
    {}
      

  6.   

    关键字inline必须与函数定义体放在一起才能使函数成为内联,仅将inline放在函数声明前面不起任何作用。如下风格的函数Foo不能成为内联函数:
    inline void Foo(int x, int y);  // inline仅与函数声明放在一起
    void Foo(int x, int y)
    {

    }
    而如下风格的函数Foo则成为内联函数:
    void Foo(int x, int y); 
    inline void Foo(int x, int y) // inline与函数定义体放在一起
    {

    }
      

  7.   

    另,如果把函数体写在类定义里的话,就算不加inline也自动是内联函数。
      

  8.   

    我分開寫. 在實現的地方有inline .但是, 編譯的時候報找不到函數體. 真的不知道為什麼. 這個問題不是經常出現. 但是會出現. 就像我們使用多重繼承的時候. 編譯的時候跟操作系統有關係. 有時候可以編譯通過.有時候不可以編譯通過. 其實,inline 我也比較熟悉. 但是,問題就這樣. 看來還是放在類定義的.h文件裡面了.  當然, 這個問題,我不知道你們有沒有碰到過.也許是我比較倒楣吧? 問題的確存在. 就是沒辦法. 公司的同事也碰到過.大家都不知道. 是不是編譯器的配置問題. 還是 操作系統的問題.... 煩ing......
      

  9.   

    把函数体写在类的都文件里的话,就算不加inline也自动是内联函数