rt!

解决方案 »

  1.   

    是的,我用Win32编程不是MFC,我写的内联函数在类中的调用就会出现这种情况。
      

  2.   

    理论上,内联函数在编译时静态的展开,而不是在连接时进行地址连接,如果跟调用者不在一个文件中,那编译器如何能在编译阶段知道那个函数的函数体的内容呢?如果不知道又如何能够展开呢?毕竟不是一般的函数,到连接时把地址信息写到那儿就可以了。要知道C++的编译是以文件为单位的。通常inline函数的定义应该放在.h文件中,供所有需要调用的cpp文件包含。
      

  3.   

    主要函数体也在该头文件中就解决了。还有一问题:
    我定义一头文件在里面声名变量例如:int g_nsss;此头文件被多个文件引用为什么编译的时候出现错误!说g_nsss在其他的引用此头文件的obj中已经存在。
    我的头文件这样:
    #ifndef __TRANSMIT_H_
    #define __TRANSMIT_H_
    ...
    int g_nsss;
    ...
    #endif
      

  4.   

    Debug 就算声明内联,实际上是没有内联的,因为Debug下关闭优化,这是就是普通函数,因此就OK了
    Release下,打开优化,内联函数在编译时静态的展开,调用者须知道函数的函数体内容,以便展开。通常inline函数的定义应该放在.h文件中。class A
    {
      void fo1() {...} //默认内联
      inline void fo2() {...}//指定内联(含函数体)
      inline void fo3();
    };
    //紧跟着
    inline A::fo3(){...}
    其实内联函数放在CPP里(少数情况)也是可行的,主要看调用者位置
      

  5.   

    #ifndef __TRANSMIT_H_
    #define __TRANSMIT_H_
    ...
    int g_nsss;
    ...
    #endif
    你再看看书了解static int g_nsss, extern int g_nsss, int g_nsss三个的区别
    在这里你用extern int g_nsss就可以了