我无法编译一些代码。问题似乎在于为结构的元素分配数组引用。以下是代码和错误消息。
所以我有一个看起来像这样的结构
struct numpyFormatterData{
double* pointerToNumpyData;
unsigned long numberOfDataRows;
unsigned long numberOfDataColumns;
std::string delimitedStringOfColumnNames;
};
然后我有一个生成随机50x10双精度数组的函数。
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 :(得分:0)
如果您要查找的是对数组的引用,请将double generateRandomArray(...)
的返回类型更改为double* generateRandomArray(...)
,然后返回此return &result[0][0];
之类的引用,最后更改double testDataArray
} double *testDataArray
。
编辑:我刚刚注意到你的数组是在堆栈上分配的,这不是你想要的。请考虑使用堆或vector
。