对命名空间C ++中类的静态成员函数的未定义引用

时间:2018-07-13 01:15:16

标签: c++ compiler-errors namespaces g++ static-methods

我创建了一个C ++类来提供操作互斥量的方法,并且该方法应该可以在Windows以及基于Linux的系统上运行。当我在不将类包含在命名空间中的情况下编译此代码时,它将编译并运行。但是,当我将其包含在命名空间中时,所有静态方法都会出现编译时错误,下面是一个示例。

  

未定义的引用   `mutexns :: MutexHandler :: Down(pthread_mutex_t *)'

我还没有从命名空间中使用此类的运气。任何和所有建议将不胜感激。预先谢谢你。

我正在Ubuntu 16.04计算机上使用g ++编译器。

  

g ++(Ubuntu 5.4.0-6ubuntu1〜16.04.10)5.4.0 20160609

以下是导致上述编译时错误的类定义。

#ifndef MUTEXHANDLER_H_
#define MUTEXHANDLER_H_

namespace mutexns
{
#ifdef WIN32
#include <windows.h>

#define MUTEX HANDLE

#else
#include <pthread.h>

#define MUTEX pthread_mutex_t

#endif

    typedef enum
    {
        SUCCESS = 0,                    // Operation successful
        ERR_UNKNOWN = -1,               // An unknown error occurred
        ERR_MUTEX_CREATION = -2,    // Error creating mutex
        ERR_MUTEX_LOCK = -3,            // Error acquiring lock
        ERR_MUTEX_UNLOCK = -4,      // Error releasing lock
    } MUTEX_ERROR;

    class MutexHandler
    {
        private:
            MutexHandler ();

        public:

            static MUTEX_ERROR
            Initialize (MUTEX *mutex);

            static MUTEX_ERROR
            Down (MUTEX *mutex);

            static MUTEX_ERROR
            Up (MUTEX *mutex);

            static MUTEX_ERROR
            TryDown (MUTEX *mutex); // Only for Linux
    };
}

#endif /* MUTEXHANDLER_H_ */

0 个答案:

没有答案