我有一個公共的方法,其中,被定義爲C++類(讓我們稱之爲CLASSA):升壓信號:連接失敗
void someFunction(someOtherCppClassB* arg);
這「someFunction」方法執行以下操作:
theConnection = registerFunction(aPtrToAnInstanceOfCStruct1, boost::bind(&classA::callbackFunction, this, _1));
其中'theConnection'是ClassA中的私有成員變量,它的類型爲boost :: signals2 :: connection
其中'callbackFunction'是classA中的私有方法,定義如下:
int callbackFunction(cStruct2** doublePtr);
和其中 'aPtrToAnInstanceOfCStruct1' 是一個指向這個C結構的一個實例:
typedef struct cStruct1T
{
boost::signals2::signal<int (cStruct2**)> signalVariable;
} cStruct1
和cStruct2被定義爲:
typedef struct cStruct2T
{
/* Variables in this struct */
char someDummyVariable;
} cStruct2
在 'registerFunction' 被定義爲:
boost::signals2::connection registerFunction(cStruct1* aPtrToAnInstanceOfCStruct1, boost::function<int (cStruct2**)> someCallbackFunction)
{
/* THIS FAILS FOR SOME REASON */
return aPtrToAnInstanceOfCStruct1->signalVariable.connect(someCallbackFunction);
}
For:某種原因.connect()生成在Android 4.3以下:
F/libc的(8556):致命信號11(SIGSEGV)在0x0000000c(代碼= 1),螺紋8556
我不瞭解導致錯誤的原因。所以我希望有一個Boost專家可以看看上面的代碼並告訴我我做錯了什麼。
謝謝。
工作。怎樣才能在結構中聲明'connectSlot'? – user1884325
我很高興聽到它爲你工作。你不需要*在結構中聲明'connectSlot'。因爲'signalVariable'是公共的,所以你可以在任何地方調用'signalVariable.connect(..)'。但是,我通常會將我的信號聲明爲私有信號,因此我必須提供一種將插槽連接到信號的方法。另外,它將信號代碼放在一起,這樣可以使維護更容易,例如,boost :: signals2就像'boost :: signals'一樣被棄用。 – kenba