реклама на сайте
подробности

 
 
> С++. Ошибка в private-контрукторе, почему то требует default-конструктор
jorikdima
сообщение Jan 8 2007, 22:16
Сообщение #1


тут может быть ваша реклама
*****

Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280



Добрый день.

Наткнулся на непонятную для меня проблему. Сначала делал для MSP430, но под Win на Visual Studio тоже самое, поэтому вопрос связан с общими понятиями C++.
Код
class A
{
public:
    static A* Init(int i);
private:
    A(int u);
    int r;
};

A* A::Init(int i)
{
    A(i);                   //[b]вот тут ошибка[/b]
}

A::A(int u)
{
    r=u;
}

void main()
{
    A* p=A::Init(6);
}

Вот такой вот простецкий код. Хочу сделать private-constructor, так как надо сделать ограничение на количество создаваемых объектов. В статической функции Init провожу проверку (сдесь не написал для наглядности) и если условие выполняется, то вызываю коснструктор, то есть выделяю память.
И все у меня здорово, до тех пор пока конструктор был без параметров, все работало как надо. А вот при добавлении параметра к конструктору оба компилятра выдают какую-то неперевариваемую мной ошибку:
Код
1. redifinition of formal parameter i
2. "A": no appropriate default constructor available

не понимаю, почему он хочет дефолт-конструктор и почему переопределение переменной i?


PS
Модераторы, не первый раз уже думаю в какую часть форума писать подобные вопросы. Нет подфорума по общим вопросам программирования (или в системный уровень программирования писать???). Написал тут хотя понимаю - ЦОС непричем.

Спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
shreck
сообщение Feb 12 2007, 07:25
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 327
Регистрация: 24-06-06
Из: Томск
Пользователь №: 18 328



Может быть не совсем по теме вопроса, но хочется привести решение похожей задачи из классики.

Для того, чтобы ограничить количество создаваемых экземпляров класса одним объектом применяется идеология синглетона:
Код
В файле Single.h

// класс в виде синглетона
class Single
{
public:

    // функция, с помощью которой осуществляется ВЕСЬ доступ
    // к методам и данным класса.
    // Пример синтаксиса вызова: Single::instance()->some_function();
    static Single* instance();

    // Интерфейс класса

    void some_function();


private:
    
    // закрытые члены и методы.


    // объявление данных функций закрытыми предотвращает создание
    // более чем одного экземпляра класса.
    Single(int param);
    ~Single();
    // функции ниже не должны реализовываться
    Single(const Single&); // чтобы нельзя было передавать как параметр функции.
    Single& operator=(const Single&); // для запрета присваивания одного объекта другому
};


В файле реализации Single.c

//------------------------------------------------------------------------------
// Создание и предоставление доступа к единственному объекту
// класса без использования динамической памяти
//------------------------------------------------------------------------------
Single* Single::instance()
{
    static Single obj(some_param); // благодаря static объект создается единственный
                                                  // раз при первом обращении к instance()
    return &Single;
}

//------------------------------------------------------------------------------
// Реализация остальных методов класса
//------------------------------------------------------------------------------


Пример использования.

int main()
{
    // вызов метода класса
    Single::instance()->some_function();

    // или так
    Single *inst = Single::instance();

    inst->some_function();
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jorikdima   С++. Ошибка в private-контрукторе   Jan 8 2007, 22:16
- - makc   Приведите, пожалуйста, полный код, а то, например,...   Jan 8 2007, 22:35
- - jorikdima   c new у меня тоже компилируется. Но я изначальн...   Jan 8 2007, 23:03
- - Oldring   Очевидно, компилятор распарсивает эту строчку как ...   Jan 8 2007, 23:13
- - jorikdima   Все что мне надо - это контроль количества созданн...   Jan 8 2007, 23:29
|- - Oldring   Цитата(jorikdima @ Jan 8 2007, 23:29) Все...   Jan 9 2007, 00:07
- - AndrewKirs   Цитата(jorikdima @ Jan 8 2007, 22:16) A* ...   Feb 9 2007, 17:31
- - jorikdima   Спасибо! Мне понравилась идея. Так и сделаю. С...   Feb 9 2007, 17:33
- - AndrewKirs   Всегда пожалуйста.   Feb 9 2007, 17:50
- - Pathfinder   Если ограничение на число экземпляров связано с су...   Feb 9 2007, 17:54
|- - AndrewKirs   Цитата(Pathfinder @ Feb 9 2007, 17:54) Ес...   Feb 9 2007, 18:04
- - Pathfinder   AndrewKirs, считать число экземпляров объекта внут...   Feb 11 2007, 11:21
- - jorikdima   Тема была создана месяц назад, а кучу полезных сов...   Feb 12 2007, 08:56
- - AndrewKirs   Синглетон - красивая идея. Хотя все 3 варианта, пр...   Feb 13 2007, 15:30
- - AndrewKirs   Еще раз подумал, и понял, что мне не нравится в ст...   Feb 16 2007, 13:38


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 29th July 2025 - 18:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.02515 секунд с 7
ELECTRONIX ©2004-2016