2016-04-21 51 views
1

比方說,我有一個名爲Test的類。在裏面,我已經聲明瞭一個名爲testResults的結構。然後我寫了一個名爲performTest()的成員函數。我想要這個函數來改變結構變量的值(它也需要其他輸入)。這是我做了什麼:調用成員函數內的成員結構體

(注:我已經減少了代碼,使其少麻煩你檢查)

在頭

class Test : public BaseHardwareTest 
{ 
    Q_OBJECT 
public: 
    explicit Test(QObject *parent = 0); 
    struct testResults { 
     int testOneRes[15]; 
     int testTwoRes[5]; 
    }; 

    int performTest(int arg1, int arg2, struct testResults &testRes); 

signals: 

public slots: 

}; 

int Test::performTest(int arg1, int arg2, Test::testResults &testRes) 
{ 
    for (int i = 0; i < 15; i++) { 
     if(arg1 < 12) 
      testRes.testOneRes[i] = -1; 
     else 
      testRes.testOneRes[i] = 1; 
    } 

    for (int i = 0; i < 5; i++) { 
     if(arg2 < 33) 
      testRes.testTwoRes[i] = -1; 
     else 
      testRes.testTwoRes[i] = 1; 
    } 

    return 1; 
} 

這是我的各種嘗試之一。這一個沒有任何錯誤,但我不能使用它。 我無法從我的主訪問成員結構。我是面向對象概念的新手,我無法使其工作。

標題/源代碼段有什麼問題嗎?如果不是,我該如何調用這個函數?任何幫助?解決

[編輯]問題:

原來的問題是關於完全另一回事。我用 兩個項目(一個是一個庫,另一個是用於測試 庫。讓我們分別給他們打電話TESTLIB測試儀) 具有相關性。當我改變TESTLIB項目的事情,我 必須去相關TESTLIB的位置,距離的main.cpp爲了 測試讓我的IDE看到的變化並進行相應的更新。由於我是 在兩個單獨的文本編輯器窗口中工作,並沒有做我上面說的 ,我的IDE沒有看到Test類的新成員, 沒有建議我當我輸入Test:: testRes - 。這讓我 認爲我無法訪問新的成員結構。感謝大家 尋求幫助。

+2

請顯示'main'的代碼。它應該像'Test :: testResults'一樣簡單。 – Quentin

+0

你是什麼意思「我不能從我的主要訪問成員結構」;什麼是錯誤?顯示更多代碼。 – shrike

+0

顯示美國'主()',你也不必'結構testResults&testRes',你只需要'testResults&testRes' – dtech

回答

1

struct testResults不是類的成員,它只是一個類型聲明。你不能像訪問類中的實際數據那樣訪問它。我認爲這就是你說的,所以這可能是混亂。

相反,你按如下方式創建一個實例:

Test::testResults myresults; 

現在,你可以通過myresults到您的測試類performTest方法的一個實例。

Test mytest; 
Test::testResults myresults; 

// Assumes "QString" (whatever it is) has a constructor that takes a string: 
mytest.performTest("Hello", "Goodbye", myresults); 
+0

謝謝你,鮑勃。結果是一個經典的新手錯誤。 (我敢肯定,昨天,我的IDE沒有告訴我'testResults'類'Test'下,雖然,我不知道爲什麼) – ddyn

1

看來你正在定義錯誤的功能。你定義了int Test::performTest(int arg1, int arg2, DDRTest::testResults &testRes),但是,你應該應該定義爲int Test::performTest(QString arg1, QString arg2, Test::testResults &testRes)

+0

對不起,我是想減少我的原代碼,似乎我不能」請妥善處理。謝謝你的提醒。 – ddyn

1

你有你的h文件和CPP文件之間的不匹配:

在h文件

您有:

int performTest(QString arg1, QString arg2, struct testResults &testRes); 

應該

int performTest(int arg1, int arg2, testResults &testRes) 

,並在你的CPP- file:

int Test::performTest(int arg1, int arg2, DDRTest::testResults &testRes) 

shoul d是

int Test::performTest(int arg1, int arg2, Test::testResults &testRes) 

你看到了區別?

+0

對不起,我是想減少我的原代碼,顯然我忘了改頭部分。現在我剛剛編輯了你在我的問題中提到的部分,謝謝。 – ddyn