Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Класс, инлайн функции. 
:(
    Опции темы
Темный
Дата 24.10.2005, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



Здравствуйте, столкнулся с такой проблемой:
есть класс
Код


class mnoz
{public:
  void vvod();
  void raschet();
  void vivod();
 };


далее мне нужно описать сами функции, там та и возникает проблема
Код

inline mnoz::void vvod()
{тело функции
}

оставшиеся 2 аналогично
в главной функции
Код

void main()
{mnoz ob;
  ob.vvod();
  ob.raschet();
  ob.vivod();
}

Ошибки выдает следующие:
Identifier Expected
Declaration terminated incorrectly


Пожалуйста скажите где я накосорезил и как это исправить.
Зараннее спасибо
PM MAIL   Вверх
Darhazer
Дата 24.10.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 2
Всего: 29



Привет,
Во первих, правильная декларация функции:

Код

inline void mnoz::vvod()
{
тело функции
}


Во вторих, насколько я знаю, нельзя пользуват inline функцию не в классе, в котором дефинировал ее

Это сообщение отредактировал(а) Darhazer - 24.10.2005, 17:01


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Neitron
Дата 24.10.2005, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 580
Регистрация: 3.10.2005
Где: Москва

Репутация: 2
Всего: 5



Зачем ты используешь inline?
Далее нужно вот так...
Код

inline void mnoz::vvod()
{тело функции
}



--------------------
Хороший программист никогда ничего не делает хорошо с первого раза. Он понимает важность патчей.
Ⓘ ⓁⒾⓀⒺ ⓂⓄⓏⒾⓁⓁⒶ
PM MAIL   Вверх
Темный
Дата 24.10.2005, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



Исправил, теперь пишет, что ошибки внутри ф-ии
"Functions containing for are not expanded inline"
Я синтаксис уже миллион раз проверил.
Добавлено @ 17:09
Я с этого и начал, тела функций были описаны в самом классе, из-за этого сообщения я решил их вынести за класс
PM MAIL   Вверх
maxim1000
Дата 24.10.2005, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



компилятор какой?
вообще-то обычно, если компилятор неважно по каким причинам не может встроить функцию, он пишет об этом в виде предупреждения
кроме того, если мне не изменяет память то компилятор из VisualC++ с for'ами справляется...


--------------------
qqq
PM WWW   Вверх
Темный
Дата 24.10.2005, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



Это Борланд, консольные приложения и выдает он на самом деле предупреждением плюс две ошибки , которые вероятно являются следствием вышеуказанных предупреждений
PM MAIL   Вверх
Darhazer
Дата 24.10.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 28.9.2005
Где: HellCity (Sofia, Bulgaria)

Репутация: 2
Всего: 29



Убери inline и все будет работать ;)


--------------------
I'm a wheel, I'm a wheel, I can roll, I can feel
But you can't stop me turning
'Cause I'm the sun, I'm the sun, I can move, I can run
But you'll never stom me burning
PM MAIL WWW ICQ YIM   Вверх
Темный
Дата 24.10.2005, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



неа, не канает, так 5 ошибок smile
Добавлено @ 17:21
Вот весь код
Код

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
class mnoz
{private:int i,j,k,l,a[20],b[20],c[40],d[40],m,n;
 public:
  void vvod();
  void raschet();
  void vivod();
 };
void mnoz::vvod()
{clrscr();
 printf("\nVvod 2-x mnozestv");
 printf("\n\nSkolko elementov v pervom?:");
 scanf("%d",&m);
 printf("\n\nSkolko elementov vo vtorom?:");
 scanf("%d",&n);
 printf("\nVvod elementov pervogo mnozestva");
 for(i=0;i<m;i++)
  {printf("\nVvedite element:");
   scanf("%d",a[i]);
   };
 printf("\nVvod elementov vtorogo mnozestva");
 for(j=0;j<n;j++)
  {printf("\nVvedite element:");
   scanf("%d",b[i]);
   };
  };
void mnoz::raschet()
{int p;
 k=0;l=0;
 for(i=0;i<m;i++)
  {for(j=0;j<n;j++)
   if(a[i]==b[j]){a[i]=c[k];k++;};
    };
   for(i=0;i<m;i++)
   {a[i]=d[l];l++;};
   for(i=0;i<m;i++)
    {p=0;
     for(j=0;j<n;j++)
      if(a[i]==b[j])p++;;
     if(p==0){a[i]=d[l];l++};
     };
  k--;
  l--;
  };
 void mnoz::vivod()
   {clrscr();
    int v;
    printf("\nVivod mnozestv");
    printf("\nMnozestva A={");
    for(i=0;i<m;i++)
     printf("%d, ",a[i]);
    printf("} i B={");
    for(j=0;j<n;j++)
     printf("%d, ",b[i]);
    printf("}");
    printf("\nPeresekautsya v podmnozestve C={");
    for(v=0;v<k;v++)
     printf("%d, ",c[v]);
    printf("}");
    printf("\nObjedinyautsya v mnozestvo D={");
    for(v=0;v<l;v++)
     printf("%d, ",d[v]);
    printf("}");
    getch();
    };

void main()
{mnoz ob;
 ob.vvod();
 ob.raschet();
 ob.vivod();
 }

без инлайнов
PM MAIL   Вверх
maxim1000
Дата 24.10.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



Цитата
Убери inline и все будет работать ;)

Цитата
неа, не канает, так 5 ошибок

и правильно
проблема inline-функций, что их экземпляры находятся в каждом obj-файле, а потому при линковании нужно обрабатывать их специальным образом, чтобы не возникало конфликта имен
так что если функции объявляются в h-файле, то их надо делать или в самом классе или с inline
Цитата
Это Борланд, консольные приложения и выдает он на самом деле предупреждением плюс две ошибки , которые вероятно являются следствием вышеуказанных предупреждений

если можно, текст ошибок...


--------------------
qqq
PM WWW   Вверх
_hunter
Дата 24.10.2005, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



значит опять код показывай.
+ конструктор класса где?
Добавлено @ 17:27
после закрывающей скобки функции точка с запятой не нужна. ( да и после циклов )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Темный
Дата 24.10.2005, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



statement missing здесь: if(p==0){a[i]=d[l];l++};
compound statement missing в конце функции расчет. Расставляешь их, становится совсем много ошибок

Добавлено @ 17:31

Это я уже на всякий случай их поставил
Добавлено @ 17:33
текст
Код

#include<stdio.h>
#include<iostream.h>
#include<conio.h>
class mnoz
{private:int i,j,k,l,a[20],b[20],c[40],d[40],m,n;
 public:
  void vvod();
  void raschet();
  void vivod();
 };
inline void mnoz::vvod()
{clrscr();
 printf("\nVvod 2-x mnozestv");
 printf("\n\nSkolko elementov v pervom?:");
 scanf("%d",&m);
 printf("\n\nSkolko elementov vo vtorom?:");
 scanf("%d",&n);
 printf("\nVvod elementov pervogo mnozestva");
 for(i=0;i<m;i++)
  {printf("\nVvedite element:");
   scanf("%d",a[i]);
   };
 printf("\nVvod elementov vtorogo mnozestva");
 for(j=0;j<n;j++)
  {printf("\nVvedite element:");
   scanf("%d",b[i]);
   };
  };
inline void mnoz::raschet()
{int p;
 k=0;l=0;
 for(i=0;i<m;i++)
  {for(j=0;j<n;j++)
   if(a[i]==b[j]){a[i]=c[k];k++;};
    };
   for(i=0;i<m;i++)
   {a[i]=d[l];l++;};
   for(i=0;i<m;i++)
    {p=0;
     for(j=0;j<n;j++)
      if(a[i]==b[j])p++;;
     if(p==0){a[i]=d[l];l++};
     };
  k--;
  l--;
  };
inline void mnoz::vivod()
   {clrscr();
    int v;
    printf("\nVivod mnozestv");
    printf("\nMnozestva A={");
    for(i=0;i<m;i++)
     printf("%d, ",a[i]);
    printf("} i B={");
    for(j=0;j<n;j++)
     printf("%d, ",b[i]);
    printf("}");
    printf("\nPeresekautsya v podmnozestve C={");
    for(v=0;v<k;v++)
     printf("%d, ",c[v]);
    printf("}");
    printf("\nObjedinyautsya v mnozestvo D={");
    for(v=0;v<l;v++)
     printf("%d, ",d[v]);
    printf("}");
    getch();
    };

void main()
{mnoz ob;
 ob.vvod();
 ob.raschet();
 ob.vivod();
 }


Это сообщение отредактировал(а) Темный - 24.10.2005, 17:31
PM MAIL   Вверх
Темный
Дата 24.10.2005, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



Когда тела были описаны внутри класса, были идентичные ошибки.Ну ладно, спасибо за помощь, буду копать дальше
PM MAIL   Вверх
_hunter
Дата 24.10.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



после i++ забыл точку с запятой
Добавлено @ 17:43
а вообще советую почитать что-нить по оформлению кода ( хоть RSDN-а статью ). потому как такое читать мягко говоря неприятно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Темный
Дата 24.10.2005, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.5.2005
Где: Ставрополь

Репутация: нет
Всего: нет



smile smile Все, исправил ошибку, которую хантер показал плюс еще одну сам нашел. Всем большое спасибо.
З.Ы. Статью почитаю надосуге, хотя обычно я пишу правильно, просто код весь перекосило, когда вырезал вставлял фрагменты.
PM MAIL   Вверх
_hunter
Дата 24.10.2005, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



сомневаюсь, чтобы аж так:
Код

 for(i=0;i<m;i++)    
  {for(j=0;j<n;j++)    
   if(a[i]==b[j]){a[i]=c[k];k++;};    
    };

перекосило... ну да ладно...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.