gpt4 book ai didi

c++ - 如何正确地将值分配给另一个结构 : 内的结构数组

转载 作者:行者123 更新时间:2023-11-28 02:43:11 26 4
gpt4 key购买 nike

我正在尝试在结构中声明一个数组;但是,我无法正确调用它。任何帮助将不胜感激。

我尝试了两种不同的方法:第一种给出编译错误,第二种给出链接错误。我进行了广泛的搜索以自己修复编译错误;但是,我想不通。因此,我需要一些帮助

我将结构定义为:

struct stPulse_Cal{
static sSample asArbSqShape[4000];
double dNormalizedAmplitudeIntegral;
};

方法 1:这里的 sSample 是第三方库中定义的另一个结构,这就是我使用它的方式:

int i;
static sSample asArbSqShape1[4000];
double placeholder[4000];
double dNormalizedAmplitudeIntegral1=0.0;
stPulse_Cal oPulse_Cal1;

// Define the pulse shape (just a trapezoid)
for (i=0; i < 4000; i++)
{
asArbSqShape1[i].flAbs = 0.01*i;
asArbSqShape1[i].flPha = 0.0;
placeholder[i] = 0.01*i;
dNormalizedAmplitudeIntegral1 += placeholder[i];
}

oPulse_Cal1.asArbSqShape = asArbSqShape1; // Line 130
oPulse_Cal1.dNormalizedAmplitudeIntegral = dNormalizedAmplitudeIntegral1;

我收到以下错误:(第 130 行标记在前面的代码片段中)

SpecialPulses.cpp(130) : error C2106: '=' : left operand must be l-value

方法 2:当我尝试为调用部分做这样的事情时:

int i;
static sSample asArbSqShape1[4000];
double placeholder[4000];
double dNormalizedAmplitudeIntegral1=0.0;
stPulse_Cal oPulse_Cal1;
// Define the pulse shape (just a trapezoid)
for (i=0; i < 4000; i++)
{
oPulse_Cal1.asArbSqShape[i].flAbs = 0.01*i;
oPulse_Cal1.asArbSqShape[i].flPha = 0.0;
placeholder[i] = 0.01*i;
dNormalizedAmplitudeIntegral1 += placeholder[i];
}
oPulse_Cal1.dNormalizedAmplitudeIntegral = dNormalizedAmplitudeIntegral1;

我收到链接错误:

CESTiPAT_OffsetSeriesd_CEST.obj : error LNK2001: unresolved external symbol "public: static struct sSampleTag * stPulse_Cal::asArbSqShape" (?asArbSqShape@stPulse_Cal@@2PAUsSampleTag@@A)
CESTiPAT_OffsetSeriesd_SpecialPulses.obj : error LNK2001: unresolved external symbol "public: static struct sSampleTag * stPulse_Cal::asArbSqShape" (?asArbSqShape@stPulse_Cal@@2PAUsSampleTag@@A)
\n4\x86\prod/bin/CESTiPAT_OffsetSeriesd.dll : fatal error LNK1120: 1 unresolved externals
make: *** [\n4\x86\prod/bin/CESTiPAT_OffsetSeriesd.dll] Error 96

最佳答案

在您的第一种方法中,您尝试将静态数组分配给静态数组,但这是行不通的。

如果您有动态数组,您将能够分配指针,但是这不会给您想要的结果,因为您很可能想要复制信息,而不是指向相同的内存地址。

您可以:

  • 逐个元素复制数组中的所有内容
  • 对数组使用 memcpy(更快)

这是 memcpy 的代码片段:

memcpy(oPulse_Cal1.asArbSqShape,asArbSqShape1,4000*sizeof(sSample));

我不知道 sSample 是如何定义为一个结构的,但如果它由基本类型组成并且没有指针,那么 memcpy 应该会给你你想要的结果。

对于你的第二个问题,我不能确定,但​​很可能你在结构中将 sSampleTag* 声明为静态的,而你忘记在你的 .cpp 中声明它,所以一个对象将包含它。

编辑!

第二次查看您的代码后,您的链接错误是因为您将 stPulse_Cal 中的 asArbSqShape 声明为静态的!这意味着,只有一个 sSample stPulse_Cal::asArbSqShape[4000] 程序范围...但是您只在结构定义中声明了它。

有两种方法可以解决这个问题:

  • 从您的结构中删除“static”关键字。
  • 将下面的代码片段添加到一个cpp文件中

代码片段:

sSample stPulse_Cal::asArbSqShape[4000]

我会删除“static”关键字。

关于c++ - 如何正确地将值分配给另一个结构 : 内的结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25261534/

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