От:
Gorn
Дата: 06.10.04 08:11
Оценка:
Весь вечер вчера просидел.. Скажите, где не прав, а то начинаю сомневаться в своем понимании языка...
файл table.h
struct Entry
{
int i;
};
void AddToTable ();
файл main.c
int main(int argc, char* argv[])
{
AddToTable ("", 0, 0);
struct Entry e;
return 0;
}
На строке
struct Entry e;
ошибка
error C2143: syntax error : missing ';' before 'type'
Спасибо....
От:
Vamp
Дата: 06.10.04 08:15
Оценка:
А где прототип AddToTable с тремя параметрами?
Да здравствует мыло душистое и веревка пушистая.
От:
Bell
Дата: 06.10.04 08:16
Оценка:
Здравствуйте, Gorn, Вы писали:
G>Весь вечер вчера просидел.. Скажите, где не прав, а то начинаю сомневаться в своем понимании языка...
G>файл table.h
G>G>typedef struct
G>{
G> int i;
G>} Entry;
G>
Любите книгу — источник знаний (с) М.Горький
Здравствуйте, Gorn, Вы писали:
...
G>G>struct Entry
G>{
G> int i;
G>};
G>void AddToTable ();
G>
...
Это не определение типа, а создание глобального экземпляра структуры, надо так
typedef struct
{
int i;
}Entry;
теперь Entry — это тип.
От:
Gorn
Дата: 06.10.04 08:17
Оценка:
пробовал, то же самое...
От:
Gorn
Дата: 06.10.04 08:17
Оценка:
Здравствуйте, Vamp, Вы писали:
V>А где прототип AddToTable с тремя параметрами?
ошибся... прототип такой:
void AddToTable ();
От:
Gorn
Дата: 06.10.04 08:19
Оценка:
да, еще интересный момент: эти две строчки (вызов функции и создание экземпляра структуры) работают по отдельности (!), но не вместе...
Здравствуйте, Gorn, Вы писали:
G>файл table.h
G>G>struct Entry
G>{
G> int i;
G>};
G>void AddToTable ();
G>
G>файл main.c
G>G>int main(int argc, char* argv[])
G>{
G> AddToTable ("", 0, 0);
G> struct Entry e;
G> return 0;
G>}
G>
G>На строке
G>G>struct Entry e;
G>
1. Исправь несоответсвие типов AddToTable
в table.h она объявлена без параметров, а используется с параметрами
Но ошибка не из-за этого.
2. В С (не С++) переменные должны объявляться в начале блока.
Т.е. Нужно делать так:
int main(int argc, char* argv[])
{
struct Entry e;
AddToTable ("", 0, 0);
return 0;
}
От:
Sheridan
Дата: 06.10.04 08:22
Оценка:
Здравствуйте, Gorn, Вы писали:
А зачем это?
[сcode]
int main(int argc, char* argv[])
{
AddToTable ("", 0, 0);
struct Entry e;
return 0;
}
[/сcode]
Без struct не пробовал?
-=RSDN@Home 1.1.4 beta 3 rev. 190=- [...]
Matrix has you...
От:
Gorn
Дата: 06.10.04 08:22
Оценка:
спасибо...
Все понятно...
От:
Demon
Дата: 06.10.04 08:25
Оценка:
Здравствуйте, Gorn, Вы писали:
G>спасибо... Все понятно...
А почему так грустно?
Оно работает?
От:
PVA
Дата: 06.10.04 08:30
Оценка:
Здравствуйте, Gorn, Вы писали:
G>Весь вечер вчера просидел.. Скажите, где не прав, а то начинаю сомневаться в своем понимании языка...
В языке С переменные должны быть объявлены в начале, до какой-либо функциональности/
Примерно так:
struct Entry
{
int a;
};
void AddFun();
int main(int argc, char *argv[])
{
struct Entry m;
AddFun();
return 0;
}
newbie
Здравствуйте, Demon, Вы писали:
D>1. Исправь несоответсвие типов AddToTable
D> в table.h она объявлена без параметров, а используется с параметрами
В table.h функция объявлена как принимающая произвольные параметры (без прототипа), так что несоответствия типов нет.
Я кончил, джентльмены, мне остается только поблагодарить вас за внимание.
PVA>В языке С переменные должны быть объявлены в начале, до какой-либо функциональности/
В языке С переменные можно объявлять в начале блока, т.е. не обязательно в начале определения функции.
void Foo();
int Bar();
void fun(void )
{
int i;
Foo();
if (Bar())
{
int k = 0;
Foo();
{
int k1 = 1;
}
}
}
Кроме того, можно вот так
void f()
{
//
SomeFun();
for (int i = 0; ;){}
}
Of course, the code must be complete enough to compile and link .
От:
PVA
Дата: 06.10.04 13:55
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:
PVA>>В языке С переменные должны быть объявлены в начале, до какой-либо функциональности/
L_L>В языке С переменные можно объявлять в начале блока, т.е. не обязательно в начале определения функции.
Согласен
L_L>Кроме того, можно вот так
А вот так низзя!!!
L_L>L_L>void f()
L_L>{
L_L> //
L_L> SomeFun();
L_L> for (int i = 0; ;){}
L_L>}
L_L>
но можно вот так:
void f()
{
//
SomeFun();
{
int i;
for (i = 0; ;){}
}
}
newbie
PVA>А вот так низзя!!!
Хехе, так в С99 можно и если у тебя компилятор хороший ...
Of course, the code must be complete enough to compile and link .
От:
_wqwa
Дата: 07.10.04 09:05
Оценка:
Здравствуйте, Demon, Вы писали:
D>2. В С (не С++) переменные должны объявляться в начале блока.
D> Т.е. Нужно делать так:
D>D>int main(int argc, char* argv[])
D>{
D> struct Entry e;
D> AddToTable ("", 0, 0);
D> return 0;
D>}
D>
Если быть точным, то С99 позволяет смешивать объявления переменных и рабочий код, равно как и не позволяет так свободно обращаться с декларациями функций, но, понятно, не везде этого уже придерживаются
... << RSDN@Home 1.1.3 stable >>
Кто здесь?!
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить