1. ホーム
  2. C++

error: '.' トークンの前に未修飾の ID が必要です。

2022-01-22 06:27:20

C++では、ロック機能を実装するためにmutexヘッダーファイルが導入されており、mutext.lock()でロック、mutex.unlock()でロックを解除するようになっています。

#include <mutex>

using namespace std;

mutex t_mutex;

class Csingleob
{
        private:
                Csingleob(){}
        static Csingleob *p;

        public:
                static Csingleob * getInstance()
                {
                        mutex.lock();
                        if (p == NULL)
                        {
                                p = new Csingleob();
                        }
                        mutex.unlock();
                        return p;
                }
};


しかし、コンパイル時にエラーが報告され、次のようになります。

error: expected unqualified-id before '.' token mutex.lock();

 mutext.lock() で直接ロックし、mutex.unlock() でロックを解除するのは間違いです。まずクラスや構造体をインスタンス化してから "." を使って、適切なメソッドを呼び出すようにしてください。

を修正しました。

#include <mutex>

using namespace std;

mutex t_mutex;

class Csingleob
{
        private:
                Csingleob(){}
        static Csingleob *p;

        public:
                static Csingleob * getInstance()
                {
                        t_mutex.lock();
                        if (p == NULL)
                        {
                                p = new Csingleob();
                        }
                        t_mutex.unlock();
                        return p;
                }
};

Csingleob* Csingleob::p = NULL;