2017-04-20 43 views
-4

我無法獲得一些代碼來編譯。問題似乎是將一個數組引用賦給一個結構的元素。以下是下面的代碼和錯誤消息。C++分配數組引用的麻煩struct

所以我有一個結構,看起來像這樣

struct numpyFormatterData{ 
    double* pointerToNumpyData; 
    unsigned long numberOfDataRows; 
    unsigned long numberOfDataColumns; 
    std::string delimitedStringOfColumnNames; 
}; 

然後,我有一個生成雙打的隨機50×10陣列的功能。

double generateRandomArray(double lower_, double upper_) 
{ 
    int row = 50; 
    int columns = 10; 
    double arr[rows][columns]; 

    for (int i = 0; i < rows; i++) { 
     for (int j = 0; j < columns; j++) { 
      arr[i][j] = std::uniform_real_distribution<double>(lower_, upper_)(gen); 
     } 
    } 
    return arr; 
} 

在我的測試案例中,我有下面的代碼是導致問題。我正在使用Catch測試框架。

TEST_CASE("Test construction of NumpyDataRequest Class", "[NumpyDataRequest]") { 

SECTION("Test factory method for creating NumpyDataRequest") { 

    double testDataArray = generateRandomArray(0.0, 2.0); 
    numpyFormatterData testNumpyRequest; 
    testNumpyRequest.numberOfDataRows = 50; 
    testNumpyRequest.numberOfDataColumns = 10; 
    testNumpyRequest.delimitedStringOfColumnNames; 
    testNumpyRequest.pointerToNumpyData = &testDataArray; //PROBLEM HERE 

    std::unique_ptr<NumpyDataRequest> testingDataRequest = NumpyDataRequest::setDataForRequest(testNumpyRequest); 
    numpyFormatterData checkDataRequest = testingDataRequest->getRequestData(); 
    REQUIRE(checkDataRequest.numberOfDataColumns == 10); 


} 
} 

我得到的錯誤信息是:

undefined reference to `generateRandomArray(double, double)' 
collect2: error: ld returned 1 exit status 

我知道,我想引用不正確分配給testDataArray。我嘗試了各種不同的方式來做到這一點,但都沒有奏效。有什麼建議麼?

+0

我看到一些問題。首先,根據你的錯誤文本,在測試文件的範圍內沒有包含generateRandomArray函數。其次,你的函數中沒有結果字段,你可以指定什麼。最後,看起來結果似乎不是雙倍*,而是雙倍**。請檢查一下。 –

+0

結果沒有在'generateRandomArray(...)'中聲明,但讓我們假設它被聲明在別的地方,並且可以訪問,但你仍然不能'返回結果;'因爲函數返回一個double也不能在C++中返回一個數組,你而是返回一個指向第一個元素的指針。 –

+0

@ArseniiFomin所以其實問題不在於generateRandomArray函數。我在generateRandomArray函數的測試文件中有一個'include',所以這似乎不成問題。現在,當我移除'testDataArray'前面的'&'amperstand時,我得到一個錯誤'不能將'double'轉換爲'double *' testNumpyRequest.pointerToNumpyData = testDataArray;'這就是爲什麼我認爲錯誤位於該分配。 – krishnab

回答

0

如果你正在尋找的是你的數組的引用,然後改變double generateRandomArray(...)double* generateRandomArray(...)返回類型,然後返回這樣return &result[0][0];參考,最終改變double testDataArraydouble *testDataArray

編輯:我只是注意到你的數組是分配在堆棧上,而不是你想在這個例子中。考慮使用堆而不是vector

+0

好的,謝謝。所以我和你在generateRandomArray上。我實際上返回'arr' - 似乎我放了一箇舊版本的功能 - 所以我會解決這個問題。我與你在函數返回一個指向數組的指針。感謝您澄清如何解決這個問題。我會給它一個鏡頭。 – krishnab

+0

嘿法雅。哈哈,我很樂意使用矢量,但不能在這種情況下。所以我實際上試圖從python numpy連接到C++。 Numpy公開了一個基本指針,指向它的底層C數組。所以我必須在C++端恢復這一點。一旦我在C++中使用它,那麼我實際上會生成一個向量 - 但首先我需要捕獲numpy發送的指針。但是你的評論真的很有幫助。我對C++編程還不太熟悉,所以只是想方設法。 – krishnab