求帮忙看下哪写错了
c吧
全部回复
仅看楼主
level 4
0x40000000
楼主
用g++编译时报错信息为 undefined reference to `complex operator +=(complex &)`。
2022年08月19日 09点08分
1
level 4
0x40000000
楼主
2022年08月19日 09点08分
4
level 4
0x40000000
楼主
@風之街
回复好像被百度删了。我大概明白了。程序要先编译成.o和.obj文件,再链接。每个函数会有一个函数符号。链接时,编译器会根据函数符号在.h文件生成的.o文件中寻找函数的具体实现。inline函数是将二进制代码复制到调用的地方,在编译阶段进行,不会有函数符号。链接时找不到+=函数的具体实现,所以报错。
#include本质上是把源代码复制过去,把inline函数的定义放在.h文件中时,会进行展开,而放在.cpp文件中时不会,因为两个cpp文件是分别进行编译的。
2022年08月20日 10点08分
6
風之街
以 inline 修饰的函数叫做内联函数,编译时C++编译器会在调用内联函数的地方展开,没有函数压栈的开销,内联函数提升程序运行的效率。 和宏的使用是差不多的
2022年08月20日 10点08分
風之街
@luvstruck
1、宏定义不会进行类型的判断,只是单存的替换文本;inline会对参数类型进行判断。 2、宏不是函数,inline修饰的是函数。 3、宏返回值不能强制转换成合适的类型,inline返回值可以。 4,发生阶段不一样,宏发生在预编译阶段,内联发生在编译阶段
2022年08月20日 10点08分
贴吧用户_0NQ3G44
@風之街
2022年11月09日 17点11分
level 14
aaaaaaa421
补充一下,inline 在现代 C++ 中已经失去了其原本的内联含义(即使没有 inline,编译器也会自动衡量内联的得失并决定是否内联),其现在的含义是“允许多次定义”,并可在变量或者函数上使用,这样做很好地解决了将变量或函数定义于头文件时产生的 ODR 违例。
2022年11月10日 00点11分
10
1