C++11 正在进行main的decltype

C++11 正在进行main的decltype,c++11,main,decltype,C++11,Main,Decltype,尝试在其上调用hi或std::move,结果如下: /tmp/cch3DRvH.o: In function `main': main.cpp:(.text.startup+0x5): undefined reference to `hi(int, char**)' collect2: error: ld returned 1 exit status #包括 #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { decltype(main)hi;

尝试在其上调用
hi
std::move
,结果如下:

/tmp/cch3DRvH.o: In function `main':

main.cpp:(.text.startup+0x5): undefined reference to `hi(int, char**)'

collect2: error: ld returned 1 exit status
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
decltype(main)hi;
decltype(主)hi2;
//std::function hi2=std::move(hi);
//hi(argc,argv);
std::cout
decltype(main)
是类型
int(int,char**)
的别名。您已使用此类型声明函数
hi
,但未定义它

要消除
未定义的引用
错误,只需定义函数:

int hi( int, char ** ) {
    return 0;
}
出现在
true
之前的消息不是从您的程序输出的,而是从编译器输出的。

decltype(main)
是类型
int(int,char**)
的别名。您已经用此类型声明了一个函数
hi
,但没有定义它

要消除
未定义的引用
错误,只需定义函数:

int hi( int, char ** ) {
    return 0;
}

出现在
true
之前的消息不是从程序输出的,而是从编译器输出的。

虽然这是真的,但据我所知,OP不需要定义。列出的所有用例都只需要声明。@templatetypedef他问“是否可以使此程序不输出未定义的对HI的引用(int,char**)?"它一定是引用了另一个程序,没有显示。嗯,我明白了。整个
extern
的东西让我很困惑。这是有道理的。@remyabel
extern
是默认值;不管你是保留函数声明/定义还是添加它。虽然这是真的,但据我所知,OP不需要定义。列出的所有用例只需要一个声明。@templatetypedef他问“有可能让这个程序不输出未定义的对hi(int,char**)的引用吗?”它一定是引用了另一个程序,没有显示。嗯,我明白了。整个
extern
的东西让我很困惑。这是有道理的。@remyabel
extern
是默认值;不管你是保留函数声明/定义还是添加它。