LINUX.ORG.RU

parse какой-то ! ! !


0

0

home wdf # make
g++ -c -pipe -Wall -W -O2 -march=pentium4 -DQT_NO_DEBUG -I/usr/qt/3/mkspecs/linux-g++ -I. -I. -I/usr/qt/3/include -o first_f.o first_f.cpp
In file included from first_f.cpp:24:
first_f.ui.h: In member function `virtual void first_f::mount_bClick()':
first_f.ui.h:32: error: declaration of `virtual void first_f::umount_bClick()'
outside of class is not definition
first_f.ui.h:32: error: parse error before `{' token
first_f.ui.h:48: error: declaration of `virtual void first_f::open_bClick()'
outside of class is not definition
first_f.ui.h:48: error: parse error before `{' token
make: *** [first_f.o] Ошибка 1
home wdf #

Ссылается на заголовки функций-слотов.
Все компилировалось пока не написал в тело функций код. То есть было так:
void first_f::mount_bClick(){
}

Стало так:
void first_f::mount_bClick(){
...
}

8-/

Класс описан в другом модуле. Ну, знаете как в qt проектах.
Форма first_f. Описание в first_f.cpp, слоты в first_f.ui.h


> Класс описан в другом модуле. Ну, знаете как в qt проектах.

Вот и давай сюда описание класса. Такое впечатление, что ты объявление
функции вне класса поместил.

int19h ★★★★
()
Ответ на: комментарий от int19h

Дело в том что раньше, пока тело ф-и не закодил, все компилировалось!
//--------------------------------------------------------------
first_f.h:

class first_f : public QMainWindow
{
Q_OBJECT

public:
first_f( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
~first_f();

QButtonGroup* button_g;
QPushButton* mount_b;
QPushButton* umount_b;
QPushButton* open_b;
QListView* items_g;

Config *conf;

public slots:
virtual void mount_bClick();
virtual void umount_bClick();
virtual void open_bClick();
virtual void items_gClick( QListViewItem * item );

protected:
QHBoxLayout* first_fLayout;
QVBoxLayout* button_gLayout;
QSpacerItem* spacer4;
QSpacerItem* spacer1;
QSpacerItem* spacer2;
QSpacerItem* spacer3;

protected slots:
virtual void languageChange();

};
//--------------------------------------------------------------
first_f.cpp:

first_f::first_f( QWidget* parent, const char* name, WFlags fl )
: QMainWindow( parent, name, fl )
{
(void)statusBar();
if ( !name )
setName( "first_f" );
setCentralWidget( new QWidget( this, "qt_central_widget" ) );
first_fLayout = new QHBoxLayout( centralWidget(), 11, 6, "first_fLayout");

button_g = new QButtonGroup( centralWidget(), "button_g" );
button_g->setColumnLayout(0, Qt::Vertical );
button_g->layout()->setSpacing( 6 );
button_g->layout()->setMargin( 11 );
button_gLayout = new QVBoxLayout( button_g->layout() );
button_gLayout->setAlignment( Qt::AlignTop );
spacer4 = new QSpacerItem( 20, 16, QSizePolicy::Minimum, QSizePolicy::Expanding );
button_gLayout->addItem( spacer4 );

mount_b = new QPushButton( button_g, "mount_b" );
button_gLayout->addWidget( mount_b );
spacer1 = new QSpacerItem( 20, 16, QSizePolicy::Minimum, QSizePolicy::Expanding );
button_gLayout->addItem( spacer1 );

umount_b = new QPushButton( button_g, "umount_b" );
button_gLayout->addWidget( umount_b );
spacer2 = new QSpacerItem( 20, 16, QSizePolicy::Minimum, QSizePolicy::Expanding );
button_gLayout->addItem( spacer2 );

open_b = new QPushButton( button_g, "open_b" );
button_gLayout->addWidget( open_b );
spacer3 = new QSpacerItem( 20, 20, QSizePolicy::Minimum, QSizePolicy::Expanding );
button_gLayout->addItem( spacer3 );
first_fLayout->addWidget( button_g );

items_g = new QListView( centralWidget(), "items_g" );
items_g->addColumn( tr( "Caption" ) );
items_g->addColumn( tr( "Device" ) );
items_g->addColumn( tr( "Point" ) );
items_g->addColumn( tr( "Mount" ) );
first_fLayout->addWidget( items_g );

// toolbars

languageChange();
resize( QSize(486, 212).expandedTo(minimumSizeHint()) );
clearWState( WState_Polished );

// signals and slots connections
connect( mount_b, SIGNAL( clicked() ), this, SLOT( mount_bClick() ) );
connect( umount_b, SIGNAL( clicked() ), this, SLOT( umount_bClick() ) );
connect( open_b, SIGNAL( clicked() ), this, SLOT( open_bClick() ) );
connect( items_g, SIGNAL( selectionChanged(QListViewItem*) ), this, SLOT( items_gClick(QListViewItem*) ) );

mount_b->setEnabled(false);
umount_b->setEnabled(false);
open_b->setEnabled(false);
}
//--------------------------------------------------------------

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

Щас вот даже решил поэксперементировать:
Закомментировал тело ф-й mount_bClick() и umount_bClick() - все скомпилировалось!!!
Вот модуль first_f.ui.h:

#include <sys/mount.h>

void first_f::mount_bClick(){
/* int i;
for (i = 0; i < this->conf->all; i++){
if (this->conf->item[i].ViewItem == this->items_g->selectedItem())
break;
int res = mount(this->conf->item[i].device,
this->conf->item[i].point,
this->conf->item[i].fstype, 0, 0);
if (res == -1)
printf("\nItem %i not mounted: %i", i, errno);
else {
this->mount_b->setEnabled(true);
this->umount_b->setEnabled(false);
this->open_b->setEnabled(false);
}*/
}


void first_f::umount_bClick(){
/* int i;
for (i = 0; i < this->conf->all; i++){
if (this->conf->item[i].ViewItem == this->items_g->selectedItem())
break;
int res = umount(this->conf->item[i].point);
if (res == -1)
printf("\nItem %i not umounted: %i", i, errno);
else {
this->mount_b->setEnabled(false);
this->umount_b->setEnabled(true);
this->open_b->setEnabled(true);
}*/
}


void first_f::open_bClick(){

}


void first_f::items_gClick(QListViewItem *item){
int i;
char *buf = new char [255];
bool mounted = false;

for (i = 0; i < this->conf->all; i++)
if (item == this->conf->item[i].ViewItem)
break;
printf("\nItem: %i", i);
FILE *p;
if ((p = popen("mount", "r")) == NULL){
printf("\nCan not run command \"mount\"!\n");
exit(0);
}
while (!feof(p)){
fgets(buf, 255, p);
if (!strcmp(this->conf->item[i].device, strtok(buf, " ")))
mounted = true;
}

if (mounted){
this->mount_b->setEnabled(false);
this->umount_b->setEnabled(true);
this->open_b->setEnabled(true);
} else {
this->mount_b->setEnabled(true);
this->umount_b->setEnabled(false);
this->open_b->setEnabled(false);
}
}


Если раскомментировать хотя бы одну ф-ю не компилируется.

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

> void first_f::mount_bClick(){
> /* int i;
> for (i = 0; i < this->conf->all; i++){
> ...
>
> void first_f::umount_bClick(){
> /* int i;
> for (i = 0; i < this->conf->all; i++){
> ...
>
> Если раскомментировать хотя бы одну ф-ю не компилируется.

Конечно, оно не компилируется - ты зачем после for открыл фигурную
скобку, а потом не закрыл ее?

int19h ★★★★
()
Ответ на: комментарий от int19h

А ты шутник!
Там многоточие. Ф-и большие, поэтому все и не привел.
Ошибок в ф-х нет. Так как появлялись ошибки, я их исправлял. Потом появился parse.

Ссылается он на заголовки ф-й.

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

> Вот модуль first_f.ui.h:

а это теперь модно определять фунции в хедерах?

anonymous
()

Дык онож как virtual объявлено 8)

majordomo
()
Ответ на: комментарий от Ty3uK

> А ты шутник!
> Там многоточие. Ф-и большие, поэтому все и не привел.
> Ошибок в ф-х нет. Так как появлялись ошибки, я их исправлял. Потом
> появился parse.

Еще раз: в твоих _закомментиованных_ функциях одна лишняя фигурная
скобка. И в том коде, что ты дал, многоточий не было - это я их
нарисовал.

int19h ★★★★
()
Ответ на: комментарий от int19h

Так это ж QTDesigner туда зафигачил слоты.
Я только учусь, так что подумал что так и надо.

Ошибок в коде ф-й точно нет.

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

Он же ссылается на заголовок в котором нет ошибок! Это как!


#include <sys/mount.h>

void first_f::mount_bClick(){
int i;
for (i = 0; i < this->conf->all; i++){
if (this->conf->item[i].ViewItem == this->items_g->selectedItem())
break;
int res = mount(this->conf->item[i].device,
this->conf->item[i].point,
this->conf->item[i].fstype, 0, 0);
if (res == -1)
printf("\nItem %i not mounted: %i", i, errno);
else {
this->mount_b->setEnabled(true);
this->umount_b->setEnabled(false);
this->open_b->setEnabled(false);
}
}


void first_f::umount_bClick(){
int i;
for (i = 0; i < this->conf->all; i++){
if (this->conf->item[i].ViewItem == this->items_g->selectedItem())
break;
int res = umount(this->conf->item[i].point);
if (res == -1)
printf("\nItem %i not umounted: %i", i, errno);
else {
this->mount_b->setEnabled(false);
this->umount_b->setEnabled(true);
this->open_b->setEnabled(true);
}
}


void first_f::open_bClick(){

}


void first_f::items_gClick(QListViewItem *item){
int i;
char *buf = new char [255];
bool mounted = false;

for (i = 0; i < this->conf->all; i++)
if (item == this->conf->item[i].ViewItem)
break;
printf("\nItem: %i", i);
FILE *p;
if ((p = popen("mount", "r")) == NULL){
printf("\nCan not run command \"mount\"!\n");
exit(0);
}
while (!feof(p)){
fgets(buf, 255, p);
if (!strcmp(this->conf->item[i].device, strtok(buf, " ")))
mounted = true;
}

if (mounted){
this->mount_b->setEnabled(false);
this->umount_b->setEnabled(true);
this->open_b->setEnabled(true);
} else {
this->mount_b->setEnabled(true);
this->umount_b->setEnabled(false);
this->open_b->setEnabled(false);
}
}

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

Дык онож как virtual объявлено 8)

и это повод описание функции в хедер засовавать? ошибки при линковки практически гарантированны

хотя int19h прав, здесь действительно ошибка в {}

void first_f::mount_bClick(){ <- открыли

/* int i;

for (i = 0; i < this->conf->all; i++){ <- открыли

if (this->conf->item[i].ViewItem == this->items_g->selectedItem())

break;

int res = mount(this->conf->item[i].device,

this->conf->item[i].point,

this->conf->item[i].fstype, 0, 0);

if (res == -1)

printf("\nItem %i not mounted: %i", i, errno);

<- не закрыли else {

this->mount_b->setEnabled(true);

this->umount_b->setEnabled(false);

this->open_b->setEnabled(false);

}*/

}

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, господа!!!
Вы мне очень помогли!

А что за дела с virtual и херерами?
Какие то ограничения?

PS Сильно не пинать!

Ty3uK
() автор топика
Ответ на: комментарий от Ty3uK

да нет никаких ограничений,

коминтарий по поводу virtual, ваще не понятен, какая разница virtual не virtual

если ты определяешь (не объявляешь а определяешь) в хедере, а затем успользуешь этот хедер в двух разных единицах компиляции, которые потом линкуются в один обектник, линковщик не может врубится: у него две функции с одинаковыми именами, какую юзать?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.