Re: Problem with initialization of array of class objects
Hi guys;
Sorry for silly 'double int' type mistake, I know that there is no
such type, too. I just made mistake when writing the class definition
to the group. Anyway, now you can find actual codes. These are
Variable and ReaedersNWriters classes. As you can see, I have defined
a const member mode , takes values of BLOCKING, TIMED_WAIT,
NONBLOCKING , in ReadersNWriters class.
namespace Monitor{
template <class DataType>
class Variable : public ReadersNWriters
{
public:
Variable(WaitingMode);
~Variable();
bool Read(DataType&);
bool Write(const DataType&);
private:
DataType data;
boost::mutex enter;
};
}
class ReadersNWriters
{
protected:
typedef boost::mutex::scoped_lock scoped_lock;
ReadersNWriters(WaitingMode);
~ReadersNWriters();
bool BeginRead(scoped_lock&);
void EndRead(void);
bool BeginWrite(scoped_lock&);
void EndWrite(void);
private:
const WaitingMode mode;
int waitingReaders;
int nReaders;
int waitingWriters;
int nWriters;
boost::condition canRead;
boost::condition canWrite;
};
All I want to do is defining an array of Monitor::Variable<int>
objects and initializing their const mode as TIMED_WAIT, BLOCKING or
NONBLOCKING.
Monitor::Variable<int> datad[] = {TIMED_WAIT, NONBLOCKING, BLOCKING,
TIMED_WAIT}; // Compiler doesn't give any error, here
But it complains like that:
------------------------------------------------------------
**** Build of configuration Debug for project test ****
make all
Building file: ../main.cpp
Invoking: GCC C++ Compiler
g++ -I/usr/local/boost_1_34_1 -I"/home/oktay/workspace/test" -O0 -g3 -
Wall -c -fmessage-length=0 -MMD -MP -MF"main.d" -MT"main.d" -o"main.o"
"../main.cpp"
.../main.cpp: In function 'void writer_list(int)':
.../main.cpp:237: warning: unused variable 'data1'
.../main.cpp:239: warning: unused variable 'data3'
.../main.cpp:240: warning: unused variable 'data4'
/usr/local/boost_1_34_1/boost/noncopyable.hpp: In copy constructor
'boost::condition::condition(const boost::condition&)':
/usr/local/boost_1_34_1/boost/noncopyable.hpp:27: error:
'boost::noncopyable_::noncopyable::noncopyable(const
boost::noncopyable_::noncopyable&)' is private
/usr/local/boost_1_34_1/boost/thread/condition.hpp:79: error: within
this context
/usr/local/boost_1_34_1/boost/noncopyable.hpp: In copy constructor
'boost::detail::condition_impl::condition_impl(const
boost::detail::condition_impl&)':
/usr/local/boost_1_34_1/boost/noncopyable.hpp:27: error:
'boost::noncopyable_::noncopyable::noncopyable(const
boost::noncopyable_::noncopyable&)' is private
/usr/local/boost_1_34_1/boost/thread/condition.hpp:35: error: within
this context
/usr/local/boost_1_34_1/boost/thread/condition.hpp: In copy
constructor 'boost::condition::condition(const boost::condition&)':
/usr/local/boost_1_34_1/boost/thread/condition.hpp:79: note:
synthesized method
'boost::detail::condition_impl::condition_impl(const
boost::detail::condition_impl&)' first required here
.../ReadersNWriters.h: In copy constructor
'ReadersNWriters::ReadersNWriters(const ReadersNWriters&)':
.../ReadersNWriters.h:11: note: synthesized method
'boost::condition::condition(const boost::condition&)' first required
here
.../Variable.h: In copy constructor
'Monitor::Variable<int>::Variable(const Monitor::Variable<int>&)':
.../Variable.h:13: note: synthesized method
'ReadersNWriters::ReadersNWriters(const ReadersNWriters&)' first
required here
/usr/local/boost_1_34_1/boost/noncopyable.hpp: In copy constructor
'boost::mutex::mutex(const boost::mutex&)':
/usr/local/boost_1_34_1/boost/noncopyable.hpp:27: error:
'boost::noncopyable_::noncopyable::noncopyable(const
boost::noncopyable_::noncopyable&)' is private
/usr/local/boost_1_34_1/boost/thread/mutex.hpp:35: error: within this
context
.../Variable.h: In copy constructor
'Monitor::Variable<int>::Variable(const Monitor::Variable<int>&)':
.../Variable.h:13: note: synthesized method 'boost::mutex::mutex(const
boost::mutex&)' first required here
.../main.cpp: At global scope:
.../main.cpp:27: note: synthesized method
'Monitor::Variable<int>::Variable(const Monitor::Variable<int>&)'
first required here
make: *** [main.o] Error 1
----------------------------------------------------------------
In general it's a good idea to reserve all uppercase names for macros.
Using them for constants is a Java'ism. Leads to problems in C++.
I really don't what Java'ism, C'ism or C++'ism are, and I want to
learn coding conventions about C++, if you could suggest me a good
tutorial, ebook etc.
Thanks
yatko