如何正确地将值分配给另一个struct中的struct数组:

时间:2014-08-12 10:04:14

标签: c++ arrays struct

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

我尝试了两种不同的方式:第一种是编译错误,第二种是链接错误。我做了大量的搜索来自己修复编译错误;但是,我无法弄清楚。因此,我需要一些帮助

我将结构定义为:

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

1 个答案:

答案 0 :(得分:2)

在第一种方法中,您尝试将静态数组分配给静态数组,这样就无法工作。

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

你可以:

  • 按元素复制元素中的所有内容
  • 使用memcpy作为数组(更快)

这是memcpy的代码段:

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

我不知道sSample是如何被定义为结构的,但如果它由基类型组成而没有指针,则memcpy应该为您提供所需的结果。

对于您的第二个问题,我无法确定,但您最有可能在结构中将sSampleTag *声明为静态,并且您忘记在.cpp中声明它也是如此一个对象将包含它。

编辑!

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

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

  • 删除&#34;静态&#34;结构中的关键字。
  • 将波纹管代码段添加到cpp文件

代码段:

sSample stPulse_Cal::asArbSqShape[4000]

我会去除&#34;静态&#34;关键字。