我無法獲得一些代碼來編譯。問題似乎是將一個數組引用賦給一個結構的元素。以下是下面的代碼和錯誤消息。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
。我嘗試了各種不同的方式來做到這一點,但都沒有奏效。有什麼建議麼?
我看到一些問題。首先,根據你的錯誤文本,在測試文件的範圍內沒有包含generateRandomArray函數。其次,你的函數中沒有結果字段,你可以指定什麼。最後,看起來結果似乎不是雙倍*,而是雙倍**。請檢查一下。 –
結果沒有在'generateRandomArray(...)'中聲明,但讓我們假設它被聲明在別的地方,並且可以訪問,但你仍然不能'返回結果;'因爲函數返回一個double也不能在C++中返回一個數組,你而是返回一個指向第一個元素的指針。 –
@ArseniiFomin所以其實問題不在於generateRandomArray函數。我在generateRandomArray函數的測試文件中有一個'include',所以這似乎不成問題。現在,當我移除'testDataArray'前面的'&'amperstand時,我得到一個錯誤'不能將'double'轉換爲'double *' testNumpyRequest.pointerToNumpyData = testDataArray;'這就是爲什麼我認爲錯誤位於該分配。 – krishnab