我试图在结构中声明一个数组;但是,我无法正确调用它。任何帮助将不胜感激。
我尝试了两种不同的方式:第一种是编译错误,第二种是链接错误。我做了大量的搜索来自己修复编译错误;但是,我无法弄清楚。因此,我需要一些帮助
我将结构定义为:
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
答案 0 :(得分:2)
在第一种方法中,您尝试将静态数组分配给静态数组,这样就无法工作。
如果你有动态数组,你可以分配指针,但是这不会给你想要的结果,因为你很可能想要复制信息,而不是指向相同的内存地址。
你可以:
这是memcpy的代码段:
memcpy(oPulse_Cal1.asArbSqShape,asArbSqShape1,4000*sizeof(sSample));
我不知道sSample是如何被定义为结构的,但如果它由基类型组成而没有指针,则memcpy应该为您提供所需的结果。
对于您的第二个问题,我无法确定,但您最有可能在结构中将sSampleTag *声明为静态,并且您忘记在.cpp中声明它也是如此一个对象将包含它。
编辑!
在第二次查看代码后,您的链接错误是因为您将stPulse_Cal中的asArbSqShape声明为静态!这意味着,只有一个sSample stPulse_Cal :: asArbSqShape [4000]程序范围...但是你只在结构定义中声明它。
有两种方法可以解决这个问题:
代码段:
sSample stPulse_Cal::asArbSqShape[4000]
我会去除&#34;静态&#34;关键字。