Форум программистов, компьютерный форум CyberForum.ru

Зависимости и статические члены - C++

Восстановить пароль Регистрация
 
PlayerDark
0 / 0 / 0
Регистрация: 02.12.2009
Сообщений: 62
29.06.2010, 06:30     Зависимости и статические члены #1
По ходу дела, у меня возникла следующая проблема.
Допустим, что у нас есть два класса. Один класс затребует второй. Второй класс затребует первый (такие случаи бывают). По какой то причине такой код опять же не компилируется.
2) Ошибка номер два. Не удается получить доступ к статическому члену класса ?

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
#ifndef h_hd1_
#define h_hd1_
//#pragma once
 
#include "hd2.h"
 
class hd1 {
public:
    hd2 getHd2() const;
    static const hd2 cst;
};
 
const hd2 hd1::cst(4);
 
hd2 hd1::getHd2() const {
    return hd2(1);
};
 
#endif
 
#ifndef h_hd2_
#define h_hd2_
//#pragma once
 
#include "hd1.h"
 
class  hd2 {
public:
    hd2(int val) {
        member = val;
    }
    hd1 getHd1() {
        return hd1();
    }
    int member;
};
 
#endif
 
 
#include "hd1.h"
#include "hd2.h"
//#include "abuze.h"
 
//#include <vector>
 
//#define vector std::vector
 
#include <iostream>
using namespace std;
 
int main() {
    hd1 hd;
    hd.getHd2();
 
           //здесь тоже ошибка.
    cout << hd1::cst.member << endl;
    int i;
    cin >> i;
 
    return 0;
};
1>g:\projects\visual studio 2008\projects\brainzout\brainzout\hd2.h(12) : error C2146: syntax error : missing ';' before identifier 'getHd1'
1>g:\projects\visual studio 2008\projects\brainzout\brainzout\hd2.h(12) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>g:\projects\visual studio 2008\projects\brainzout\brainzout\hd2.h(12) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>g:\projects\visual studio 2008\projects\brainzout\brainzout\hd2.h(14) : warning C4183: 'getHd1': missing return type; assumed to be a member function returning 'int'
1>g:\projects\visual studio 2008\projects\brainzout\brainzout\hd2.h(13) : error C3861: 'hd1': identifier not found

Добавлено через 11 часов 24 минуты
вверх

Добавлено через 15 секунд
вверх
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2010, 06:30     Зависимости и статические члены
Посмотрите здесь:

Как правильно инициализировать статические члены класса? C++
статические массивы, члены класса C++
C++ Статические члены класса
C++ Статические члены и функции
Статические члены C++
C++ Статические члены класса
Классы (статические члены и конструктор копирования) C++
C++ Класс MyString через статические члены класса

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
uggway
219 / 133 / 9
Регистрация: 12.04.2010
Сообщений: 248
29.06.2010, 09:06     Зависимости и статические члены #2
Не компилируется по причине того, что один класс не знает о существовании второго.
Необходимо сделать декларации обоих классов до определения структуры классов и расположить реализацию методов классов после определения структуры обоих классов.
Примерно так:
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
#include <iostream>
using namespace std;
 
class hd1;
class hd2;
 
 
class hd1 {
public:
        hd2 getHd2() const;
        static const hd2 cst;
};
 
 
 
 
class  hd2 {
public:
        hd2(int val) {
                member = val;
        }
        hd1 getHd1() {
                return hd1();
        }
        int member;
};
 
 
const hd2 hd1::cst(4);
 
hd2 hd1::getHd2() const {
        return hd2(1);
};
 
int main() {
        hd1 hd;
        hd.getHd2();
 
           //здесь тоже ошибка.
        cout << hd1::cst.member << endl;
        int i;
        cin >> i;
 
        return 0;
};
Yandex
Объявления
29.06.2010, 09:06     Зависимости и статические члены
Ответ Создать тему
Опции темы

Текущее время: 13:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru