Russian Qt Forum
Сентябрь 22, 2024, 11:40 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Компилятор не видит в приватной секции QVector ! Не пойму изза чего.  (Прочитано 3796 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Июнь 29, 2009, 09:00 »

Доброго времени суток!

Имею...

modbusnode.h
Код:
class TModbusNode : public QObject
{
Q_OBJECT
...
public:
...
private:
    class TPrivateData : public QSharedData{
        ...
        QVector< QList< TModbusRegister * > > regArray(NUM_TYPES_REG); // <- это строка № 147
        ...
    }
    QSharedDataPointer<TPrivateData> d;

modbusnode.cpp
Код:
....
quint16 TModbusNode::regQuantity(TModbusRegister::TModbusRegisterType rtype) const
{
switch (rtype) {
case TModbusRegister::Reg_0x: return (quint16)d->regArray.at(0).count(); // <- строка №57
case TModbusRegister::Reg_1x: return (quint16)d->regArray.at(1).count(); // <- строка №58
case TModbusRegister::Reg_3x: return (quint16)d->regArray.at(2).count(); // <- строка №59
case TModbusRegister::Reg_4x: return (quint16)d->regArray.at(3).count(); // <- строка №60
case TModbusRegister::Reg_6x: return (quint16)d->regArray.at(4).count(); // <- строка №61
default: return 0;
}
}
....

кусок вывода компилятора:
Цитировать
....
In file included from modbusnode.cpp:15:
modbusnode.h:147: error: expected `;' before '(' token
modbusnode.cpp: In member function `quint16 TModbusNode::regQuantity(TModbusRegister::TModbusRegiste
rType) const':
modbusnode.cpp:57: error: 'const class TModbusNode::TPrivateData' has no member named 'regArray'
modbusnode.cpp:58: error: 'const class TModbusNode::TPrivateData' has no member named 'regArray'
modbusnode.cpp:59: error: 'const class TModbusNode::TPrivateData' has no member named 'regArray'
modbusnode.cpp:60: error: 'const class TModbusNode::TPrivateData' has no member named 'regArray'
modbusnode.cpp:61: error: 'const class TModbusNode::TPrivateData' has no member named 'regArray'
....

и т.п. ошибок оч много! 

Вопрос: что я делаю не так? Почему пишет, что нету у меня regArray ?
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #1 : Июнь 29, 2009, 09:32 »

regArray это не объялвение поля класса, а неизвестно что, скорее похоже на объявление метода, если бы NUM_TYPES_REG было именем типа.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Июнь 29, 2009, 09:46 »

Цитировать
regArray это не объялвение поля класса, а неизвестно что, скорее похоже на объявление метода.
не понял? regArray - это массив списков (из 5-ти элементов), который в QSharedData я "втиснул"! Что имеете ввиду?

Цитировать
если бы NUM_TYPES_REG было именем типа
эммм... ну NUM_TYPES_REG объявлена как:
Код:
       ....
static const int NUM_TYPES_REG=5; //количество типов регистров (0x+1x+3x+4x+6x = 5)
       ....


если Вас смутило то, что нет слова public - то оно есть:
Код:
    class TPrivateData : public QSharedData{
    [b]public:[/b]
        ...
        QVector< QList< TModbusRegister * > > regArray(NUM_TYPES_REG); // <- это строка № 147
        ...
    }

« Последнее редактирование: Июнь 29, 2009, 09:53 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #3 : Июнь 29, 2009, 09:52 »

Не надо путать объявление и инициализацию. Перенесите вызов конструктора вектора в список инициализации при конструкторе TPrivateData
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #4 : Июнь 29, 2009, 09:56 »

не понял, зачем?

из примера в ассистенте:
Код:
    class EmployeeData : public QSharedData
    {
    public:
        int id;
        QString name;
    };
тоже QString никуда в конструктор не вынесен... и я подумал что и QVector в принципе ничем не отличается, если его вместо QString подставить
Записан

ArchLinux x86_64 / Win10 64 bit
Rcus
Гость
« Ответ #5 : Июнь 29, 2009, 10:02 »

/** \facepalm */... Зачем так избирательно цитировать пример?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #6 : Июнь 29, 2009, 10:30 »

сделал так:
Код:
class TModbusNode : public QObject
{
Q_OBJECT
...
public:
...
private:
    class TPrivateData : public QSharedData{
        [b]TPrivateData () { regArray.resize(NUM_TYPES_REG); }[/b]
        ...
        QVector< QList< TModbusRegister * > >  regArray;
        ...
    }
    QSharedDataPointer<TPrivateData> d;
}
и вроде заработало. Спасибо ! Улыбающийся
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 22.