我无法获得一些代码来编译。问题似乎是将一个数组引用赋给一个结构的元素。以下是下面的代码和错误消息。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