I use linux and try to compile Candle2 project in my QT 5.15.3.
I get the following error from compiler:
/home/yuri/src/Candle2/src/utils/safequeue.h:86: error: no matching constructor for initialization of 'std::unique_lockstd::mutex'
In file included from ../frmmain_heightmap.cpp:21:
In file included from ../../src/frmmain.h:43:
../../src/utils/safequeue.h:86:38: error: no matching constructor for initialization of 'std::unique_lockstd::mutex'
std::unique_lockstd::mutex lock(mMutex);
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:66:16: note: candidate constructor not viable: 1st argument ('const std::mutex') would lose const qualifier
explicit unique_lock(mutex_type& __m)
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:107:7: note: candidate constructor not viable: no known conversion from 'const std::mutex' to 'const std::unique_lockstd::mutex' for 1st argument
unique_lock(const unique_lock&) = delete;
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:110:7: note: candidate constructor not viable: no known conversion from 'const std::mutex' to 'std::unique_lockstd::mutex' for 1st argument
unique_lock(unique_lock&& __u) noexcept
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:62:7: note: candidate constructor not viable: requires 0 arguments, but 1 was provided
unique_lock() noexcept
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:73:7: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
unique_lock(mutex_type& __m, defer_lock_t) noexcept
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:77:7: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
unique_lock(mutex_type& __m, try_to_lock_t)
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:81:7: note: candidate constructor not viable: requires 2 arguments, but 1 was provided
unique_lock(mutex_type& __m, adopt_lock_t) noexcept
/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/bits/unique_lock.h:88:2: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided
unique_lock(mutex_type& __m,
This easy fixed by adding "mutable" atr to "std::mutex mMutex;":
diff:
diff --git a/src/utils/safequeue.h b/src/utils/safequeue.h
index dc4d123..6da140c 100644
--- a/src/utils/safequeue.h
+++ b/src/utils/safequeue.h
@@ -94,7 +94,7 @@ public:
private:
std::list<T> mQueue;
- std::mutex mMutex;
+ mutable std::mutex mMutex;
};