Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
#1

Доступ к статической переменной-члену - C++

08.12.2010, 21:27. Просмотров 1213. Ответов 3
Метки нет (Все метки)

Всем доброго время суток задали написать программу, в которой доступ к статической переменной-члену осуществляется с помощью статической функции-члена. Сделать статическую переменную-член закрытой, вот программный код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <iostream>
#include <iostream>
using namespace std;
class myClass
{
public:
    myClass();
    ~myClass();
    void ShowMember();
    static int GetStatic();
private:
    int itsMember;
    static int itsStatic;
};
myClass::myClass():
itsMember(1)
{
    itsStatic++;
}
myClass::~myClass()
{
    itsStatic--;
    cout << "In destructor. ItsStatic: " << itsStatic << endl;
}
void myClass::ShowMember()
{
    cout << "itsMember: " << itsMember << endl;
}
int myClass::itsStatic = 0;
void myClass::GetStatic()
{
    return itsStatic;
}
 
int main()
{
    myClass obj1;
    obj1.ShowMember();
    cout << "Static: " << myClass::GetStatic() << endl;
 
    myClass obj2;
    obj2.ShowMember();
    cout << "Static: " << myClass::GetStatic() << endl;
 
    myClass obj3;
    obj3.ShowMember();
    cout << "Static: " << myClass::GetStatic() << endl;
    return 0;
}
Компилятор выдал ошибки:
Error 1 error C2556: 'void myClass::GetStatic(void)' : overloaded function differs only by return type from 'int myClass::GetStatic(void)' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 31 p989
Error 2 error C2371: 'myClass::GetStatic' : redefinition; different basic types c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 31 p989
Error 3 error C3867: 'myClass::GetStatic': function call missing argument list; use '&myClass::GetStatic' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 39 p989
Error 4 error C2568: '<<' : unable to resolve function overload c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 39 p989
Error 5 error C3867: 'myClass::GetStatic': function call missing argument list; use '&myClass::GetStatic' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 43 p989
Error 6 error C2568: '<<' : unable to resolve function overload c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 43 p989
Error 7 error C3867: 'myClass::GetStatic': function call missing argument list; use '&myClass::GetStatic' to create a pointer to member c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 47 p989
Error 8 error C2568: '<<' : unable to resolve function overload c:\users\администратор\documents\visual studio 2008\projects\c++\console\p989\p989\p989.cpp 47 p989

На сколько я понял, ошибка в этой строке:
C++
1
2
3
4
void myClass::GetStatic()
{
    return itsStatic;
}
Как ее исправить? Уже второй день бьюсь, заранее огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2010, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Доступ к статической переменной-члену (C++):

Объявление статической переменной и статической функции в классе - C++
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена статическая переменная для процентной...

Не могу получить доступ к члену класса - C++
Прошу сильно не пинать - только начинаю изучение ООП. Собственно пишу морской бой. Описал класс &quot;Kreiser&quot; - объект, который содержит в...

Не могу получить доступ к члену класса - C++
Недавно начал изучать C++ и SDL и появилась проблема с кодом. Я могу создать поверхность(см. код) с помощь thisFunctionWoks, но не могу...

Доступ к функции-члену другого класса - C++
Каким образом можно получить доступ из одного класса к функции члену другого класса???

Доступ из нестатического метода к статическому члену класса - C++
Привет! Подскажите, пожалуйста, как можно обратиться из нестатического метода класса к статическому члену? Вот мой метод: ...

доступ к приватному члену через нестатическую ссылку - C++
Привет всем. забуксовал.. подтолкните пжалста: ситуация: - в хедере class A { private: int a; public: virtual void...

3
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.12.2010, 21:47 #2
Объявлен как возвращающий int,
C++
1
static int GetStatic();
а описан как возвращающий void.
C++
1
2
3
4
void myClass::GetStatic()
{
        return itsStatic;
}
1
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
08.12.2010, 21:49 #3
Вы объявили, что функция ничего возвращает, но пытаетесь возвратить что-то.
0
isaak
103 / 40 / 9
Регистрация: 17.10.2010
Сообщений: 670
08.12.2010, 22:24  [ТС] #4
Спасибо заменил void на main все работает, подскажите пожайлуста, как в этой программе исправить ошибки. Программа на функции-указатели:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
using namespace std;
class Mammal
{
public:
    Mammal():itsAge(1){}
    virtual ~Mammal(){}
    virtual void Speak() const = 0;
    virtual void Move() const  = 0;
protected:
    int itsAge;
};
class Dog: public Mammal
{
public:
    void Speak() const {cout << "Woof!\n";}
    void Move() const {cout << "Walking to heel...\n";}
};
class Cat: public Mammal
{
public:
    void Speak() const {cout << "Meow!\n";}
    void Move() const {cout << "slinking...\n";}
};
class Horse: public Mammal
{
public:
    void Speak() const {cout << "Winnie!\n";}
    void Move() const {cout << "Galloping...\n";}
};
int main()
{
    void (Mammal::*pFunc)() const = 0;
    Mammal *ptr = 0;
    int Animal;
    int Method;
    bool fQuit = false;
    while(fQuit == false)
    {
        cout << "(0)Quit (1)dog (2)cat (3)horse: ";
        cin >> Animal;
        switch (Animal)
        {
        case 1: ptr = new Dog; break;
        case 2: ptr = new Cat; break;
        case 3: ptr = new Horse; break;
        default: fQuit = true; break;
        }
        if (fQuit == false)
        {
            cout << "(1)Speak (2)Move: ";
            cin >> Method;
            switch (Method)
            {
            case 1: pFunc = &Mammal::Speak;break;
            default: pFunc = &Mammal::Move; break;
            }
            (ptr -> *pFunc())();
            delete ptr;
        }
    }
    return 0;
}
В этой программе объявляется класс Mammal (млекопитающих) как абстрактный с двумя виртуальными методами Speak() и Move(). Классы Dog, Cat Horse объявлены как производные от класса Mammal. В каждом из этих классов функции Speak() Move() переопределены соответствующим образом
Компилятор выдает ошибки:
Error 1 error C2059: syntax error : '*' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p992\p992\p992.cpp 58 p992
Error 2 error C2039: 'ptr' : is not a member of 'Mammal' c:\users\администратор\documents\visual studio 2008\projects\c++\console\p992\p992\p992.cpp 59 p992
Error 3 error C2541: 'delete' : cannot delete objects that are not pointers c:\users\администратор\documents\visual studio 2008\projects\c++\console\p992\p992\p992.cpp 59 p992
Уже третьи сутки бьюсь, подскажите пожалуйста заранее огромное спасибо!!!!!!
0
08.12.2010, 22:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2010, 22:24
Привет! Вот еще темы с ответами:

Наследование статической переменной - C++
есть класс с статистическим полем я от него &quot;произвожу&quot; два потомка. у всех этик классов будет одно общее поле(переменная) или же у...

Неожиданное значение в статической переменной - C++
Всем привет! Либо мне надо отдохнуть, либо происходит что-то неведомое... Код int f() { static int b = 3; if(b == 3) ...

Изменение значения статической переменной - C++
не дает =\ static char text; text = &quot;&quot;; это же не конст, а просто статик, в pawn&quot;е часто пользовался static и ок всё...

Доступ из статической функции к не стачисеским переменным - C++
Добрый день! Имеется класс со статической функцией, как получить доступ, из это функции к не статичным переменным. Что то типа этого: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru