编写含对象数组的类模板时遇“constructor syntax missing formal parameters”错误求助
解决"constructor syntax missing formal parameters"错误
嘿,这个错误的根源其实很直观——你的类名和私有成员变量名撞车了!
你定义的类叫List,但在类的私有区域里又声明了DT List[100];。编译器看到这个同名标识符时,会误以为你在尝试声明构造函数(因为类名在类作用域里有特殊的构造函数关联含义),但你写的是数组声明语法,不符合构造函数的参数要求(哪怕是空参数列表),所以就抛出了"constructor syntax missing formal parameters"这个错误。
解决方法很简单:把私有数组的名字改成一个和类名不冲突的标识符,比如elements或者listData就行。修正后的代码如下:
template <class DT> class List { private: DT elements[100]; // 替换掉原有的List命名 int numberInList; int listSize; int nextIndex; public: List(); void insert(DT&); DT getNext(); bool getMember(DT&); int getNumber(); }; template<class DT> List<DT>::List() { numberInList = 0; listSize = 100; // 顺便提一句,原构造函数里把listSize设为0不太合理,毕竟数组实际大小是100,建议改成100 nextIndex = 0; }
另外补充一点:在C++里,尽量别用类名当成员变量名,这类命名冲突很容易让编译器产生误解,引发奇怪的语法错误,排查起来还容易走弯路。
内容的提问来源于stack exchange,提问作者Jasmin Kenjar
相关产品推荐
相关产品推荐

