gpt4 book ai didi

c++ - C++-候选函数不可行: no known conversion from 'struct ' to 'struct (&)'

转载 作者:行者123 更新时间:2023-12-02 11:10:24 25 4
gpt4 key购买 nike

首先,我是一个完整的C++新手。我正在尝试使用一些结构体数组(包括2D结构体)作为参数来调用函数,但出现以下错误:

No matching function for call to 'function': Candidate function not viable: no known conversion from 'struct _psoParticle [particleQnty][2]' to '_psoParticle (&)[][2]' for 1st argument



我的结构(假设 Material = 1且周期= 10):
struct unit{
int inventory[material][period];
int consumption[material][period];
int replenishment[material][period];
int planned[material][period];
int accPlanned[material][period];
int demandPull[material][period];
int costPenalty[material][period];
bool delivery[material][period];
int leadtime;
int inventoryControl[material][period];
double bufferSize[material][period];
double bufferLevel[material][period];
double bufferMgmt[material][period];
const double lbGamma{-100.0};
const double ubGamma{100.0};
};

struct _psoParticle{
double positionBest;
double velocityBest;
long pbest;
};

初始化main中的数据:
struct unit CareUnit[2]{};
struct unit centralStore{};
struct _psoParticle psoParticle_CareUnit[10][2];
struct _psoParticle psoParticle_CentralStore[10];
int totalConsumption[material]{}, totalInventory{}, totalLateness{};
int particleQnty{10};
int x[particleQnty]{};

函数头:
int dbr(_psoParticle (&pso_CareUnit)[][2], _psoParticle (&pso_CentralStore)[],
int particle, unit (&CareUnit)[], unit &centralStore,
int (&totalConsumption)[1], int &totalInventory, int &totalLateness);

继续主要:
for (int i = 0; i < particleQnty; ++i)
x[i] = dbr(psoParticle_CareUnit, psoParticle_CentralStore, i, CareUnit,
centralStore, totalConsumption, totalInventory, totalLateness);

然后 pop 错误信息。

关于我做错了什么的任何想法?

谢谢!

最佳答案

嗯,是的,我知道这一点。。。嗯,您的函数应该像这样

int dbr(_psoParticle (&pso_CareUnit)[10][2], _psoParticle (&pso_CentralStore)[10],
int particle, unit (&CareUnit)[2], unit &centralStore,
int (&totalConsumption)[material], int &totalInventory, int &totalLateness);

请注意,每个参数都有指定的完整尺寸。现在,这样做的原因是所有数组都是静态数组,因此编译器必须从一开始就知道它的大头,然后再运行程序。这样它就可以像 sizeof(arr)for(T obj: arr){}之类的花哨功能,而不能做到。

现在,您可能已经注意到,这种做事方式是一团糟。您有一些选择可以使其变得更好。最小的工作就是将您的参数类型替换为模板。喜欢
template<typename T1, typename T2, etc...
int dbr(T1 &pso_CareUnit, T2 & pso_CentralStore...

然后,编译器将找出您自己到底要喂什么。您还可以将em作为指针传递,然后会丢失一些信息,并且必须以某种方式传递维度,但是无论如何...
int dbr(_psoParticle ** pso_CareUnit, _psoParticle *pso_CentralStore,...

您也可以使用STL类型,例如std::vector
int dbr(std::vector<std::vector<_psoParticle>>& pso_CareUnit, std::vector<_psoParticle>& pso_CentralStore,...

您也可以封装整个内容,例如
struct Container{
_psoParticle careUnit[10][2];
_psoParticle centralStore[10];
};

int dbr(Container & iContainer...

甚至更好
class Pso{
public:
int dbr(...
private:
_psoParticle careUnit[10][2];
_psoParticle centralStore[10];
// ... the rest of arguments
};

还有一些更时髦的方式来处理它,例如迭代器和诸如此类的东西。但是在您的情况下,我认为简单的指针解决方案或封装就足够了。尽管我警告过您将来不要使用C样式的结构和数组,但是它们很烦人,并且各种各样的STL容器都可以使用。而且您的命名约定非常奇怪,请查阅Google或GNU C++指南以获取样式提示。

关于c++ - C++-候选函数不可行: no known conversion from 'struct ' to 'struct (&)' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50069353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com