构造函数错误

时间:2010-04-15 05:25:28

标签: c++ class multiple-files

我有这个类标题

//header for class.
#ifndef Container_H
#define Container_H

#include <iostream>
using namespace std;


const int DEFAULT=32;

class Container{
    public:
        Container(int maxCapacity = DEFAULT);
        ~Container();
        void insert(int item, int index);
        void erase(int index);
        int size()const;
    private:
        int sizeC;                
        int capacityC;           
        int * elements;            
};
void info();
#endif

和此源文件

#include "container.h"


Container::Container(int maxCapacity = DEFAULT){
    int y;
}
void Container::insert(int item, int index){
    int x;
}

当我编译它时,我收到以下错误消息

test.cpp:4: error: default argument given for parameter 1 of `Container::Container(int)'
container.h:12: error: after previous specification in `Container::Container(int)

我在这里做错了什么?

4 个答案:

答案 0 :(得分:2)

没有参数的函数仍然需要括号:

Container::Container() {
    int y;
}

根据您的标题,您似乎忘记了maxCapacity参数,它实际上应该是:

Container::Container(int maxCapacity) {
    int y;
}

(如果你也在询问警告,这很明显 - 你宣布了一个int x但没有对它做任何事情)

编辑:好了,你现在编辑了它以完全改变错误。现在这是一个错误,因为你在两个地方都指定了默认参数;你只应该在声明中指明它。在实际实现中省略它,就像我上面的第二个例子

答案 1 :(得分:0)

Container::Container{ int y; }在语法上是不正确的。

修改

试试这个:

Container::Container(int maxCapacity) // default argument not to be mentioned in the definition
{
  int y;
}

答案 2 :(得分:0)

您的Container构造函数(在源文件中)应该是这样的:

Container::Container(int maxCapacity){
    // code
}

答案 3 :(得分:0)

Container::Container{
    int y;
}

我不确定这是什么意思。如果您正在尝试定义您的ctor,它应该类似于:

Container::Container(int maxCapacity) // ....

请注意,您希望在声明中包含默认值,但在定义中不包含