D “声明”和“声明”有什么区别;MyStuct a()&引用;及;我的结构a&引用;?

D “声明”和“声明”有什么区别;MyStuct a()&引用;及;我的结构a&引用;?,d,D,此程序编译并链接: struct A{ int m; } void main() { A a; int x = a.m; } 但这并不是: struct A{ int m; } void main() { A a(); int x = a.m; } $dmd app.d返回: app.o: In function `_Dmain': app.d:(.text._Dmain+0xb): undefined reference to `_D3a

此程序编译并链接:

struct A{
    int m;
}

void main()
{
    A a;
    int x = a.m;
}
但这并不是:

struct A{
    int m;
}

void main()
{
    A a();
    int x = a.m;
}
$dmd app.d
返回:

app.o: In function `_Dmain':
app.d:(.text._Dmain+0xb): undefined reference to `_D3app4mainFZ1aMFZS3app1A'
collect2: error: ld returned 1 exit status
我很困惑。

A()
是一个函数声明-它声明了一个名为
a
的函数,该函数返回结构类型
a
int x=a.m
然后调用函数
a
(如果不需要参数,则D中的参数是可选的),并读取返回值的
m
字段

因为函数只是声明的,而不是定义的,所以程序编译但不链接,因为函数
a
没有链接器可以看到的主体