InterPolation error LNK2005: "public: static double __cdecl CRandom::fun0(double &)" (?fun0@CRandom@@SANAAN@Z) 已经在 InterPolationDoc.obj 中定义下面是CRandom的结构:
// filename: Random.h
#pragma once#ifndef _CKBRandom_H //避免多次编译
#define _CKBRandom_H
class CRandom
{
public:
static double fun0(double& seed);
};#include "Random.inl"#endif在Random.inl中有fun0的实现。其中使用了STL。问题是:如果我的应用中唯一只包含一次Random.h时,一切都正常,但是如果有两个文件需要包含Random.h时,就出现了上面的编译错误。我明明是使用了避免多次编译的结构,不知道为什么会这样。

解决方案 »

  1.   

    应该不是这个重复定义,如果是的话应该显示的是CRandom类重复定义了,不会去检查里面的方法的
      

  2.   

    1)如果只是使用这个方法,可以在cpp中增加.h而不是在.h中,可以使用
    CRandom::fun0()方法来使用
    2)这个问题主要出在了对static不熟悉的问题上。如果a.h包含Random.h,而b.h包含a.h和Random.h这个肯定会出现问题。
    3)#ifndef _CKBRandom_H是为了防止头文件重复引用.
      

  3.   

    问题已解决,这与static无关,问题是出在Random.inl中
    这里只是一个inline关键字的问题,必须将Random.inl中的方法定义为inline才行的
    inline double CRandom::fun0(double& seed)
    {
    ......
    return d;
    }
    因为不放到类定义里就算是方法再定义了,即一个文件里出现两个同名方法