我有点小提琴,因为我不知道为什么我的代码在编译时会出现以下错误:
1>..\SA.cpp(81) : error C2664: 'CFE' : cannot convert parameter 1 from 'int' to 'int []'
1> Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast
基本上我想:
步骤1:使用:
从矢量转换为数组int* VecToArray(vector<int> Vec)
{
int ary[Vec.size()];
for(int i = 0; i < Vec.size(); i++)
ary[i] = Vec[i];
return ary;
}
步骤2:调用一个数组作为参数的函数,它返回一个新生成的数组的指针:
int* CFE(int density[])
{
...do stuff to generate 'double Energy[]'....
return Energy;
}
步骤3:在第三个函数中使用该指针计算能量[]的总和:
double ObjFunction (double *E_Array)
{
double SumEnergy = 0;
int n = 10; // Is irrelivant
for (int i = 0; i < n; i++)
{
SumEnergy += E_Array[i];
}
return SumEnergy;
}
为了简化编码,我使用了类似的函数,其中VectorName是一个整数向量:
double TotalEnergy = ObjFunction ( CFE ( VecToArray ( VectorName ) ) );
我显然在某处错误地获取参数类型,但我不知道为什么我自己。拥有更有经验的眼睛的人是否可以协助发现它/它们?
答案 0 :(得分:4)
Energy
来自哪里?如果它是double[]
,那么您不能将其转换为int*
。
std::vector<int>
保证是连续的,因此如果您想将std::vector<int> VectorName
转换为const int*
,请使用&VectorName[0]
。另一方面,如果您的CFE函数修改了数组传递,那么最好在本地创建它。
答案 1 :(得分:3)
不确定编译器错误,但如果从函数返回本地数组,则会遇到大问题。
答案 2 :(得分:2)
第1步有几个问题:
答案 3 :(得分:2)
你应该解决这个问题:
int ary[Vec.size()];
要:
int *ary = new int(Vec.size());
编译器在编译时不知道Vec.size(),因此无法创建数组。
请确保稍后释放内存。
那就是解决这个问题。但是,我认为你的方法也不好。 Vector具有与常规数组几乎相同的性能,但更安全,更易于使用。你为什么不用矢量?
即使你决定使用数组,按值传递也不是很有效。特别是因为您立即将输出重定向到另一个功能。我宁愿使用引用来解决这类问题。
答案 4 :(得分:1)
您无法创建具有动态评估大小的数组。 您无法返回本地定义的数组。
但是,您可以将&amp; myVector [0]视为数组。