链接器错误与头文件中的类的私有成员

Ric*_*ich 1 c++ linker header include

我正在尝试在Visual Studio 2008中构建一个项目.我收到了一堆真正困扰我的链接器错误.我的应用程序是仅使用本机ANSI C++的Win32控制台应用程序.

它们都是相同模式的链接器错误.链接器错误与我在自己的头文件中定义的类的每个私有静态数据成员相关.

我猜这可能是一个简单的c ++事实我还没有意识到?

示例:我在Delays.cpp文件中引用SingleDelay成员类的函数定义中的SingleDelay成员.即:

SingleDelay::tick(void *output, void *input, int nbufferFrames)<br>{
   //.. code here<br>
   x = dry * castInput + wet * castInput;<br>
}
Run Code Online (Sandbox Code Playgroud)

错误38错误LNK2001:未解析的外部符号"private:static double SingleDelay :: dry"(?dry @ SingleDelay @@ 0NA)Delays.obj testall

Delays.h中SingleDelay的定义:

class SingleDelay{

    private:  
        static double dry; //% of dry signal<br>
        static double wet; //% of wet signal<br>
        static unsigned int delay; //Delay in milliseconds<br>
        static int delayCell; //Index in the delayBuffer of the delay to add<br>
        static double *delayBuffer; //Delay buffer is 1 second long at sample rate SAMPLE_RATE<br>
        static unsigned int bufferCell; //Pointer to the current delay buffer cell<br>

    public:

        //Tick function
        static void tick(void *output, void *input,int nBufferFrames);

        //Set and Get functions
        static void setSingleDelay(double tDry, double tWet, unsigned int tDelay);
        static void setSingleDelay(void);

        static void setDry(double tDry);
        static void setWet(double tWet);
        static void setDelay(unsigned int tDelay);

        static double getDry(){ return dry;}
        static double getWet(){ return wet;}
        static unsigned int getDelay(){ return delay;}

        static void initializeDelayBuffer(){
            destroyDelayBuffer();

            delayBuffer = new double[bufferLength];
        }
        static void destroyDelayBuffer(){
            delete[ ] delayBuffer;
        }
};
Run Code Online (Sandbox Code Playgroud)

gre*_*ade 6

它们都是相同模式的链接器错误.链接器错误与我在自己的头文件中定义的类的每个私有静态数据成员相关.

所有静态数据成员都必须在.cpp文件中的某个位置具有定义.

错误38错误LNK2001:未解析的外部符号"private:static double SingleDelay :: dry"(?dry @ SingleDelay @@ 0NA)Delays.obj testall

链接器告诉您该变量没有已定义的存储空间.此行必须出现在一个.cpp文件中的某个位置:

double SingleDelay::dry = 0.0;
Run Code Online (Sandbox Code Playgroud)