Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

class functions

1.8K
07 мая 2006 года
pod
144 / / 05.04.2006
вот друзья токая штука
создаю класс rational в фаиле rational.h

Цитата:

# ifndef rational_h
# define rational_h

class rational{
public:
rational(int=1,int=1);
void setrational(int,int);
void getrational();
int getnumerator();
int getdenumerator();
void sum(rational,rational,rational);


private:
int numerator;
int denumerator;
void abreviate(int&,int&);

};

# endif



и когда я вызываю функцию void sum(rational,rational,rational);
в main таким образом:
rational::sum(r1,r2,r3);
компилятор выдаёт: error C2352: 'rational::sum' : illegal call of non-static member function

как же создать функцию в классе чтоб она работала в main?

2.2K
08 мая 2006 года
REFOT
181 / / 08.04.2005
Думаю тут уже ничего не поможет :)))
хотя может попробовать так?

main()
{
...
rational r;
r.sum(r1,r2,r3);
...
}

или

class rational{
public:
...
static void sum(rational,rational,rational);
...
};

main()
{
...
rational::sum(r1,r2,r3);
...
}
1.8K
08 мая 2006 года
pod
144 / / 05.04.2006
Цитата:
Originally posted by REFOT
Думаю тут уже ничего не поможет :)))
хотя может попробовать так?

main()
{
...
rational r;
r.sum(r1,r2,r3);
...
}

или

class rational{
public:
...
static void sum(rational,rational,rational);
...
};

main()
{
...
rational::sum(r1,r2,r3);
...
}



спасибо проверю

1.8K
08 мая 2006 года
pod
144 / / 05.04.2006
а вот и ответ на провереное компилятором:
'rational::sum' : 'static' should not be used on member functions defined at file scope
2.2K
10 мая 2006 года
REFOT
181 / / 08.04.2005
Цитата:
Originally posted by pod
а вот и ответ на провереное компилятором:
'rational::sum' : 'static' should not be used on member functions defined at file scope



class test
{
public:
static void sum(test,test,test);
};

void test::sum(test t1,test t2,test t3)
{
}
int _tmain(int argc, _TCHAR* argv[])
{
test t1,t2,t3;
test::sum(t1,t2,t3);
return 0;
}
вот так всё работает :)
но если объявить:

static void test::sum(test t1,test t2,test t3)
{
}

то возникнет ошибка
error C2724: 'test::sum' : 'static' should not be used on member functions defined at file scope

1.8K
11 мая 2006 года
pod
144 / / 05.04.2006
огромное спасибо
как раз то что нужно.;)
1.8K
14 мая 2006 года
pod
144 / / 05.04.2006
Employee::Employee(char *fname,char *lname,
const date &dateofbirth,const date &dateofhire)

Employee-destructor
date-class

почемож обявлять "const date &dateofbirth"
эсли const то нафиг ссылатса?
1.8K
16 июня 2006 года
pod
144 / / 05.04.2006
продолжу эту тему с таким вопросом:

эсть такой класс:

class integerset{
public:
integerset(int,int,int,int,int);
int getsetnvalue(int);
void setsetnvalue(int,int);

private:
int A[20];

};

можно назвать множество целых.
надо написать функцию:
unionofintegerset(integerset,integerset)
которая получает 2 множества и создаёт третье множество, которое
являетса объеденением тех двух.
я подумал сделать так:
static integerset unionOfIntegerSet(s1 integerset,s2 integerser)
{
s3 integerset;
..
..
..
..
return s3;
}
но компилятору это не понравилось и он выдал:
error C2512: 'integerset' : no appropriate default constructor available

plz может подскажите как решить проблему.
11K
17 июня 2006 года
Ireul
90 / / 15.06.2006
[QUOTE=pod]Employee::Employee(char *fname,char *lname,
const date &dateofbirth,const date &dateofhire)

Employee-destructor
date-class

почемож обявлять "const date &dateofbirth"
эсли const то нафиг ссылатса?[/QUOTE]

Если ты не поставишь ссылку, то получишь КОПИЮ объекта, созданную в контексте вызываемой функции. А ежели твой объект тянет мегов на 5 памяти? И всё это удовольствие будет скопировано. Сколько времени и памяти это займёт, усекаешь? А константа там чтобы тебе не пришло в голову там поковырятся, раз уж это ссылка. Дабы не напортачил.
11K
17 июня 2006 года
Ireul
90 / / 15.06.2006
[QUOTE=pod]продолжу эту тему с таким вопросом:

эсть такой класс:

class integerset{
public:
integerset(int,int,int,int,int);
int getsetnvalue(int);
void setsetnvalue(int,int);

private:
int A[20];

};

можно назвать множество целых.
надо написать функцию:
unionofintegerset(integerset,integerset)
которая получает 2 множества и создаёт третье множество, которое
являетса объеденением тех двух.
я подумал сделать так:
static integerset unionOfIntegerSet(s1 integerset,s2 integerser)
{
s3 integerset;
..
..
..
..
return s3;
}
но компилятору это не понравилось и он выдал:
error C2512: 'integerset' : no appropriate default constructor available

plz может подскажите как решить проблему.[/QUOTE]

И тут тоже всё очевидно - у тебя конструктор на 5 интов - И ОН ЕДИНСТВЕННЫЙ. Компилятор сделает тебе конструктор по умолчанию если ты не сделал своего. Если ты сделал свой конструктор с параметрами - компилер думает что ты не хочешь чтобы этот класс создавался без указания этих параметров. Если тебе нужен конструктор без параметров - определи его в классе. Если тебе он не нужен - укаж и параметры s3 integerset(int,int,int,int,int); - какие тебе надо, и он оставит тебя в покое.
3
17 июня 2006 года
Green
4.8K / / 20.01.2000
А не проще ли прочесть (хоть какую-нибудь) книгу по С++, а не программировать методом "научного тыка" и "помощи зала" ?
1.8K
19 июня 2006 года
pod
144 / / 05.04.2006
спасссссибо большое за прояснение, сейчас всё понятно
я сделал инициализацию каждого int-а в конструкторе. и всё вышло
thanks.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог