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

 
 
> С++. Ошибка в 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
Ответов
jorikdima
сообщение Jan 8 2007, 23:03
Сообщение #2


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

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



c new у меня тоже компилируется. blink.gif
Но я изначально пишу для MSP430 а там без new надо.
Разве я не могу там вызвать конструктор.
Вот более похожий на оригинал код:
Код
class A
{
public:
    static A* Init(int i);
private:
    A(int u);
    static A* a[2];
    
};

A* A::a[2]={0};

A* A::Init(int i)
{
    if (i<2 && i>0 && a[i]==0)
    {        
        A(i);                       //если индекс объекта 0 или 1 и он еще не создан, то создаем
        return a[i];             //в переменной static A* a[2]; лежат адреса созданных объектов
    }
    return (A*)0;
}

A::A(int u)
{
    a[u]=this;
}

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

Смысл идеи в следующем - подсчитывать количество созданных объектов и если выше порога не создавать, чтоб нельзя было A t[100]; написать.

PS Класс описывает работу UART, а у меня их всего два. )) Можно конечно самому себе сказать - не создавай третий и больше, но.. вобщем тут даже скорее любопытство, почему нельзя вот так?

написал и сам задал себе вопрос а почему c new нельзя???
Кстати с new и в ИАРе заработало. biggrin.gif

new - это ведь динамически выделяемая память в heap.
В чем будет разница по сравнению с обычным созданием объекта, а не через new и private конструктор?

Вообще применительно к embedded new нормально испоьзовать? Я вроде понимаю, что если динамически занимать и освобождать память то вроде Memory Management нужен, а если без delete, если только занимать?

Чето я подглюкиваю к вечеру blink.gif cranky.gif
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- jorikdima   С++. Ошибка в private-контрукторе   Jan 8 2007, 22:16
- - makc   Приведите, пожалуйста, полный код, а то, например,...   Jan 8 2007, 22:35
- - 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
- - shreck   Может быть не совсем по теме вопроса, но хочется п...   Feb 12 2007, 07:25
- - 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 Текстовая версия Сейчас: 23rd July 2025 - 19:57
Рейтинг@Mail.ru


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