我对使用重载构造函数的C ++组合感到有些困惑。我已阅读其他文章here,here和here,但仍然觉得我的问题与这些文章略有不同。第一个是最有帮助的,我实现了那里的建议,但有一些关于如何使用组合对象的问题。
以下是一些代码snippits:
// From temp.cpp
namespace tmp
{
typedef struct
{
unsigned long adcmemory;
uint32_t adcinputstuff;
}adconf;
class tempsensor
{
private:
double temp;
unsigned char memloc;
public:
tempsensor();
tempsensor(adconf setup)
{...}
// More stuff below
.
.
};
// From habs.hpp
#include <temp.cpp>
const tmp::adconf ex = {ADC_MEM0, ADC_INPUT_A22};
const tmp::adconf in = {ADC_MEM1, ADC_INPUT_A23};
class habs
{
public:
tmp::tempsensor extemp(tmp::adconf ex), intemp(tmp::adconf ex);
// More stuff below
};
// In main.cpp
void tempThread(habs::habs &habs_obj)
{ /*
This thread will update the internal and external temp sensor values
while the mutex is not locked. When the mutex is locked the thread
will spin wait.
*/
while(1)
{
while(!habs_obj.getMutex())
{
// This is what I expected to see but I get an error
// #302 a pointer to a bound function may only be used to call
// the function habs_obj.extemp.setTemp();
habs_obj.extemp.setTemp();
habs_obj.extemp(ex).setTemp();
habs_obj.intemp(in).setTemp();
}
}
}
所以我的目的是在habs类中有两个tempsensor类型的变量,并在实例化那些对象时使用temp类中的重载构造函数。然后,诸如main.cpp中的线程之类的线程将不断更新临时传感器,同时未锁定互斥锁。
我希望有人可以向我解释为什么我必须在这个问题上调用公共变量:habs_obj.intemp(in).setTemp();
而不是:habs_obj.extemp.setTemp();
我也是这样做的吗?还有另外一种方法吗?我读到了关于复制构造函数的问题,我认为这不是我需要做的事情,但我也错了。
提前致谢!