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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> незаконный запрос нестатической функции-элемента, Ошибка!!? 
V
    Опции темы
IKM2007
  Дата 2.5.2008, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Помогите с отладкой программы.

Компилятор выдает две ошибки. (illegal call of non-static member function)

main.cpp
Код
#include <iostream.h>
#include "class.h"
void main()
{
Point a(10,20),b(11,15);
cout<<"Расстаяние от точки (0,0):\na->"
    <<Point::f1(a)<<"\nb->"                                                    //Ошибка 1,1
    <<Point::f1(b)<<"Расстаяние между точками a и b->"    //Ошибка 2,1
    <<f(a,b)<<endl;
}




class.h
Код
struct Point
{
int x;
int y;
double f1(Point);               //Ошибка 1,2 и Ошибка 2,2
Point(int a=0,int b=0);
};
double f(Point,Point);


class.cpp
Код
#include <math.h>
#include "class.h"
double Point::f1(Point a)
{
return sqrt(a.x*a.x+a.y*a.y);
}
Point::Point(int a,int b)
{
x=a;
y=b;
}
double f(Point a,Point b)
{
return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}



Что не так?

Это сообщение отредактировал(а) IKM2007 - 2.5.2008, 15:37


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
JackYF
Дата 2.5.2008, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Ужас какой. что функция f1 делает в классе Point? зачем она там нужна?

Цитата(IKM2007 @  2.5.2008,  13:47 Найти цитируемый пост)
 <<Point::f1(a)<<"\nb->"                                                 //Ошибка 1,1
    <<Point::f1(b)<<"\n[a,b]->"         

Дальше. Вот что ты этим сделать хотел?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
IKM2007
Дата 2.5.2008, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Цитата
Ужас какой. что функция f1 делает в классе Point? зачем она там нужна?


f1 должен возвращать расстояние точки а от точки (0,0).

Цитата
 <<Point::f1(a)<<"\nb->"                                                 //Ошибка 1,1
    <<Point::f1(b)<<"\n[a,b]->"         


Дальше. Вот что ты этим сделать хотел?



Незнаю что за ошибку выдает компилятор? (illegal call of non-static member function) или  незаконный запрос нестатической функции-элемент


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Carnifex
Дата 2.5.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Функции члены класса так не вызываются. Point::f1() - не привязан к конкретному классу и не имеет тела.
У тебя есть класс a, вот и вызывай a.f1().
И да, f1 тогда уже вынеси из класса, или сделай без параметров, и 
Код

sqrt(a.x*a.x+a.y*a.y);

меняй на
Код

sqrt(x*x+y*y);

PM MAIL   Вверх
IKM2007
Дата 2.5.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Я ничего не понял. smile 
К функции элемент класса не обращаются? так ::


Это сообщение отредактировал(а) IKM2007 - 2.5.2008, 15:56


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
Carnifex
  Дата 2.5.2008, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Если не выносить f1, то объявление класса должно быть таким:
Код

class Point{
  int x,y;  //
public:
  Test(int a,int b);
  float f1(); 
  ~Test();
};

Point.cpp -
Код

Test::Test(int a,int b):x(a),y(b){}  //равносильно x=a,y=b
float Test::f1(){
  return sqrt(x*x+y*y);  //f1 вызывается для конкретного класса, к параметрам которого(x,y) можно\
                                        напрямую обратиться из функции
}

Вызываются функции так:
Код

int main(int argc,char **argv){
  Test a(1,4);
  a.f1();  //так вызывается функция f1 для a, экземпляра класса Test
  Test *b = new Test(2,2);
  b->f1();  //так для указателя на Test
  f(a,*b); //в функцию не член класса, классы передаются в параметрах
}
 
Ну а вообще smile 

Это сообщение отредактировал(а) Carnifex - 2.5.2008, 16:05
PM MAIL   Вверх
IKM2007
Дата 2.5.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Я только что ознакомился с классами и структурами ...
Задача такая: создать структуру Point, элементы которого координаты x и y.Структура имеет функцию-элемент, который возвращает расстояние точки от исходной точки координатов(0,0).
Это не значит, что я должен обявить функцию в структуре и обращатся к нему так Point::f1(...).



--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
JackYF
Дата 2.5.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



IKM2007, кури матчасть по поводу вызова функций у объектов класса.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
IKM2007
Дата 2.5.2008, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Зима близко
**


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

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



Цитата
IKM2007, кури матчасть по поводу вызова функций у объектов класса.


JackYF,Уже понял в чем ошибка. smile 


--------------------
"К чёрту обстоятельства, я создаю возможности."
Брюс Ли
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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