C++ LinkedList类多构造函数调用报错:请求非类类型成员add
问题原因
你遇到的是C++里经典的最令人头疼的解析(Most Vexing Parse)问题:
你在main函数里写的LinkedList l(); 不会被编译器识别为「调用无参构造函数实例化LinkedList对象l」,而是会被解析成声明了一个名为l的函数,该函数返回值为LinkedList类型,没有入参。
所以你后续调用l.add()的时候,编译器才会报错说l是LinkedList()类型(函数类型),不是类类型,不存在add成员。
解决方法
只要修改main函数里的对象实例化写法即可,有两种合法写法:
- 去掉空括号:直接写
LinkedList l;即可正确调用无参构造 - C++11及以后标准支持的统一初始化写法:
LinkedList l{};这种写法可以从语法上避免这类歧义问题
你的无参、带参构造函数本身的定义逻辑没有问题,修改实例化写法后就能正常运行。
内容的提问来源于stack exchange,提问作者Hofbr
相关产品推荐
相关产品推荐

