[英]C library in C++
我在C ++中使用C库时遇到问题。 我担心解决方案很容易,但是我很愚蠢地得到了解决方案。
该库如下定义函数:
CAENHVLIB_API CAENHVRESULT CAENHV_GetChName(int handle, ushort slot,
ushort ChNum, const ushort *ChList, char (*ChNameList)[MAX_CH_NAME]);
在示例中,其调用方式如下:
char (*listNameCh)[MAX_CH_NAME];
// ... leaving out the other lines since they are not the problem ...
listNameCh = malloc(MAX_CHANNELS*MAX_CH_NAME);
ret = CAENHV_GetChName(handle, slot, NrOfCh, listaCh, listNameCh);
所以现在的问题。 在C ++中,我无法使用malloc(MAX_CHANNELS * MAX_CH_NAME),因为我无法正确进行强制转换。 它可以与“ -fpermissive” -Flag一起使用,但我想在没有这种hack的情况下进行操作。
有人知道如何解决这个问题?
干杯
好吧,您可能可以正确地将其-fpermissive
以避免-fpermissive
。
在一个层次上,这不是黑客-C和C ++在这里有不同的隐式强制转换规则。 如果您坚持用C ++编写C,则需要偶尔进行强制转换以使其起作用。
在另一方面,问题在于您正在编写C并将其编译为C ++。 要么更好
std::array<char[MAX_CH_NAME], MAX_CHANNELS>
,它将为您处理分配
std::vector<char[MAX_CH_NAME]>
您可以使用malloc
或new
。 如果使用malloc
,则必须强制转换返回的值。 如果使用new
,则不必强制转换。
listNameCh = (char (*)[MAX_CH_NAME])malloc(MAX_CHANNELS*MAX_CH_NAME);
要么
listNameCh = new char[MAX_CHANNELS][MAX_CH_NAME];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.