Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Передать массив в объект(С++)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему
kurtis
Есть класс.
Код
    
class OZK: public dev
    {
        public:
....  
                uint8_t no_of_devs;
        void initialize(const uint8_t *mass);    
....
    };


есть функция initialize() которой нужно передать некоторые количество значений(адресса входов).
я создаю массив и пытаюсь передать на него указатель в функцию initialize().

Код
[code]
    const uint8_t massiv_1[2]=
    {
        100,
        200,
    };


вот сам код того как я передаю значения в обьект

Код
...
    Object_1.initialize(massiv_1);
    Object_1.no_of_devs=5;
...



В оригинале, massiv_1 содержит адреса входов, с которыми будет работать создаваемый обьект, но проблема в том что я изначально незнаю сколько должно быть входов и сколько должно быть обьектов. В ситуации когда есть только 1 обьект, я решал эту проблему задавая требуемое количество входов и адреса входов с помощью команд препроцессора(#define #if #elif и тд).

Был .H файл, где я задавал конфигурацию обьекта
Код
#define      No_of_devs 6                    //Количество входов устройства
#define         Addr_1 100                       //Адреса входов
#define         Addr_2 200
и тд....


ну и соответственно в описание обьекта я писал
Код
#if    No_of_devs == 1                
    Object_Addr[1] = Addr_1
#elif     No_of_devs == 2
        Object_Addr[1] = Addr_1
        Object_Addr[2] = Addr_2
....и тд.....


Таким образом я добился того, что я в одном файле ПОЛНОСТЬЮ описую конфигурацию 1го моего обьекта, и нигде больше ничего не трогаю....

Но когда мне нужно создать несколько обьектов(2 и более), то такой способ уже не подходит, т.е. все создаваемые обьекты, будут имет одинаковую конфигурацию.
Чтоб решить эту проблему я создаю таблицы и адреса этих таблиц передаю в создаваемый обьект.
Но проблема в том что код не хочет компилироватся....
компилятор выдает ошибку

Код
                 from Devs.cpp:4:
OZK_config.h:54: error: redefinition of `const uint8_t massiv_1[2]'
OZK_config.h:54: error: `const uint8_t massiv_1[2]' previously defined here
In file included from Devs.cpp:11:
OZK_config.h:54: error: redefinition of `const uint8_t massiv_1[2]'
OZK_config.h:54: error: `const uint8_t massiv_1[2]' previously defined here


использую WinAVR - 20050214

Возможно такой способ передачи совершенно неправилый, и только из-за эого у меня ничего и не работает.


Прошу прощения за кучу вероятно лишней информации, но мой вопрос вероятно сводится к тому, как передать масив данных в обьект???

З.Ы. Книжки читал и делал как написано в примерах, но видимо не очень помогло....
З.Ы.Ы. прошу прощения если не очень ясно выражаю свои мысли!
unichorn
Цитата(kurtis @ Jul 5 2007, 14:46) *
Код
[code]
    const uint8_t massiv_1[2]=
    {
        100,
        200,
    };


Запятую после 200 убери.
kurtis
Цитата(unichorn @ Jul 5 2007, 14:17) *
Запятую после 200 убери.

запятая там особо погоды не делает...
я ее убрал, но результат не изменился...
Okorok
Цитата(kurtis @ Jul 5 2007, 12:46) *
Код
                 from Devs.cpp:4:
OZK_config.h:54: error: redefinition of `const uint8_t massiv_1[2]'
OZK_config.h:54: error: `const uint8_t massiv_1[2]' previously defined here


Эта ошибка компилятора свидетельствует о том, что massiv_1 был определен в .h-файле (чего делать не рекомендуется), и теперь эта переменная создается во всех файлах в тех местах, где есть строчка " #include "OZK_config.h" ".
Соответственно, при попытке создать более чем одну переменную под одним и тем же именем компилятор сообщает об ошибке.
Исправляется это следующими двумя шагами:
1) В файле "OZK_config.h" нужно в строчке, где упоминается massiv_1, добавить "extern" и убрать присвоение. Т.е. теперь эта строчка должна выглядеть приблизительно таким образом:
Код
extern const uint8_t massiv_1[2];


2) Вышеуказанная строчка в .Н-файле - только упоминание (декларация) переменной, а определить (зарезервировать для нее место) нужно в CPP-файле, где включен "OZK_config.h". Причем только в одном из CPP-файлов, если "OZK_config.h" используется больше чем в одном месте.
Например, следующим образом:
Код
const uint8_t massiv_1[2]=
{
    100,
    200,
};
kurtis
Большое Спасибо!!!!=)))))
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.