Ошибки конструктора - PullRequest
       18

Ошибки конструктора

1 голос
/ 15 апреля 2010

У меня есть этот заголовок класса

//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 ]

2 голосов
/ 15 апреля 2010

Функции без аргументов все еще нуждаются в скобках:

Container::Container() {
    int y;
}

Исходя из вашего заголовка, похоже, что вы просто забыли аргумент maxCapacity, и на самом деле это должно быть:

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

(Если вы тоже спрашиваете о предупреждении, оно самоочевидно - вы объявили int x, но ничего с ним не сделали)

РЕДАКТИРОВАТЬ: Ну, теперь вы отредактировали его, чтобы полностью изменить ошибку. Теперь это ошибка, потому что вы указываете аргумент по умолчанию в обоих местах; Вы только должны указать это в объявлении. Оставьте это в фактической реализации, как мой второй пример выше

0 голосов
/ 15 апреля 2010
Container::Container{
    int y;
}

Я не уверен, что это должно быть. Если вы пытаетесь определить свой ctor, он должен выглядеть примерно так:

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

Обратите внимание, что вы хотите включить значение по умолчанию в объявлении, но не в определении.

0 голосов
/ 15 апреля 2010

Ваш конструктор контейнера (в исходном файле) должен выглядеть следующим образом:

Container::Container(int maxCapacity){
    // code
}
0 голосов
/ 15 апреля 2010

Container::Container{ int y; } синтаксически неверно.

EDIT:

Попробуйте это:

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