编译LineADT.cpp遇构造器识别错误:expected constructor... token
解决构造函数编译错误:expected constructor, destructor, or type conversion before ‘(’ token
你遇到的这个编译错误,核心原因是构造函数参数的类型声明语法错误。让我们一步步拆解问题:
错误原因分析
你在LineADT.cpp里的构造函数声明写了:
LineT::LineT(PointT::PointT st, MapTypes::CompassT ornt, unsigned int l)
这里的PointT::PointT st是错误的写法——PointT本身就是一个完整的类类型,不需要用PointT::来限定它自己的类型。这种写法会让编译器困惑,它会试图解析PointT::PointT作为某种嵌套类型、类型转换或者成员,而不是识别这是一个PointT类型的参数,最终导致报错。
修正方案
只需要把参数里的PointT::PointT改成PointT即可,修正后的LineADT.cpp代码如下:
#include "MapTypes.h" #include "PointADT.h" #include "LineADT.h" LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l) { this->s = st; this->o = ornt; this->L = l; }
另外补充一个小建议:你可以用初始化列表来初始化成员变量,这比在构造函数体内赋值更高效,写法如下:
LineT::LineT(PointT st, MapTypes::CompassT ornt, unsigned int l) : s(st), o(ornt), L(l) {}
验证其他潜在问题
检查你的头文件包含关系,目前看起来都是正确的:
LineADT.h包含了PointADT.h和MapTypes.h,确保了LineT类能正确识别PointT和MapTypes::CompassT类型- 所有头文件都使用了头文件保护(
#ifndef/#define/#endif),避免了重复包含问题
修正后重新编译,这个错误应该就能解决了。
内容的提问来源于stack exchange,提问作者TheShield
相关产品推荐
相关产品推荐

