class functions
создаю класс 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?
хотя может попробовать так?
main()
{
...
rational r;
r.sum(r1,r2,r3);
...
}
или
class rational{
public:
...
static void sum(rational,rational,rational);
...
};
main()
{
...
rational::sum(r1,r2,r3);
...
}
Цитата:
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);
...
}
Думаю тут уже ничего не поможет :)))
хотя может попробовать так?
main()
{
...
rational r;
r.sum(r1,r2,r3);
...
}
или
class rational{
public:
...
static void sum(rational,rational,rational);
...
};
main()
{
...
rational::sum(r1,r2,r3);
...
}
спасибо проверю
'rational::sum' : 'static' should not be used on member functions defined at file scope
Цитата:
Originally posted by pod
а вот и ответ на провереное компилятором:
'rational::sum' : 'static' should not be used on member functions defined at file scope
а вот и ответ на провереное компилятором:
'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
как раз то что нужно.;)
const date &dateofbirth,const date &dateofhire)
Employee-destructor
date-class
почемож обявлять "const date &dateofbirth"
эсли const то нафиг ссылатса?
эсть такой класс:
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 может подскажите как решить проблему.
const date &dateofbirth,const date &dateofhire)
Employee-destructor
date-class
почемож обявлять "const date &dateofbirth"
эсли const то нафиг ссылатса?[/QUOTE]
Если ты не поставишь ссылку, то получишь КОПИЮ объекта, созданную в контексте вызываемой функции. А ежели твой объект тянет мегов на 5 памяти? И всё это удовольствие будет скопировано. Сколько времени и памяти это займёт, усекаешь? А константа там чтобы тебе не пришло в голову там поковырятся, раз уж это ссылка. Дабы не напортачил.
эсть такой класс:
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); - какие тебе надо, и он оставит тебя в покое.
А не проще ли прочесть (хоть какую-нибудь) книгу по С++, а не программировать методом "научного тыка" и "помощи зала" ?
я сделал инициализацию каждого int-а в конструкторе. и всё вышло
thanks.