2012-07-10 99 views
1

我上課像這樣使用類的變量在另一個類的函數

class A : public QDialog 
{ 
A(QWidget *parent); 
static map<int,QString> dataa; 
}; 

class B : public QThread 
{ 
public void run(); 
} 

class C : public QDialog 
{ 
public void abc(); 
} 

類的界定及

void B::run() 
{ 
in this function,i am using __dataa__ as __dataa.insert__which is defined initially in A class as public. 
} 

void C::abc() 
{ 
in this function also,i am using __dataa__ as __dataa.find__ and dataa.end__ which is defined initially in A class as public. 
} 

現在,請幫助我,我怎麼可以使用在其他兩個變量DataA的類B和C.在某些地方,我看到我們必須聲明它是靜態的,並在B和C類中使用它作爲A :: data,但它不起作用並給出錯誤。作爲

int main() 
{ 
A window; 
B datathread; 
datathread.start 
//B is Qthread inherited and A,C are QDialog inherited 
} 

類C從類A通過點擊它的按鈕,並在新窗口中打開其對話初始化

這三個類被初始化。 我想這次我不會因爲沒有明確地表達我的問題而感到責備。請在神的名字上幫助我,因爲我長期以來一直困在這裏。很感謝您提供任何幫助。

+0

「它不工作,並給予錯誤」 - 什麼是錯誤?另外一般情況下,你不應該試圖像從一個類到另一個類那樣訪問數據,特別是從線程訪問數據。相反,將數據從A類注入到B類。 – 2012-07-10 05:19:21

+0

未定義參考A :: DataA的 和另一種是 多個未定義參考A :: DataA的 collect2:LD返回1退出狀態 我沒有說注射的想法method.canü編輯我的代碼,並將其粘貼你的答案 – Mcolorz 2012-07-10 05:21:09

回答

1

未定義參考A :: DataA的

你需要在的.cpp文件來定義它。你說:

std::map<int, QString> A::dataa; 

另外要確保這是訪問其他地方有兩種選擇:

  • 聲明一個類
  • 或已經返回此對象的副本的public節這個地圖對象通過像@Jeeva這樣的函數表明。

現在,要在其他單元中訪問此變量,首先要包含A類的頭文件。

#include "A.h" //or something similar.. 

及其訪問:

void B::run() //and similar with C::run(..) 
{ 
    A::dataa //do something with it .. 
} 
+0

我是否必須聲明它是靜態的或者就像地圖 dataa; – Mcolorz 2012-07-10 06:20:22

+0

它工作。謝謝感謝:D – Mcolorz 2012-07-10 06:26:29

0

我不熟悉QT,但我想這可能會有所幫助。如果你想在B級使用class'A數據或C有三個選項

  1. 繼承B類和C類,從一如果關係是meaningfull
  2. B類& C內創建一個類實例(遏制)
  3. 通過A類的公共成員函數訪問類A的數據等

    public:

    map<int, QString> GetData() 
        { 
        return dataa; 
        } 
    
+0

在第三個我會聲明這個函數在一個朋友function.its ok.but不會給錯誤,因爲函數是朋友,但不是dataa所以我怎麼能在其他類中使用它。 和第二個聽起來最合適的,你可以請編輯的問題,並張貼在你的答案給我一個這樣做的一般方式? – Mcolorz 2012-07-10 05:26:58

相關問題