Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
PlayerDark
0 / 0 / 1
Регистрация: 02.12.2009
Сообщений: 62
#1

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

29.06.2010, 06:30. Просмотров 440. Ответов 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 секунд
вверх
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.06.2010, 06:30
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Зависимости и статические члены (C++):

Статические члены
Мне необходимо создать класс А, причем: этот класс всегда нужен в единственном...

Статические члены класса
Добрый день. Проходили тему - статические члены класса. Написали программу,...

Статические члены класса
Доброго времени суток. Задача состоит в том, чтобы создать список обыектов...

Статические члены и функции
Что-то я не могу понять что я забыли и чяднт что код не компилируется....

Статические массивы, члены класса
необходимо создать статический массив. компилятор gcc #include&lt;iostream&gt;...

Как инициализировать статические члены класса
Помогите пожалуйста....я не знаю как вывести в статическое поле значения((( ...

1
uggway
219 / 133 / 48
Регистрация: 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;
};
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.06.2010, 09:06
Привет! Вот еще темы с решениями:

Классы (статические члены и конструктор копирования)
Добрый вечер! Написал программку, все нормально работает, но есть два нюанса:...

Конструктор класса, содержащего только статические члены
Практикуюсь по книге Стенли Липпмана &quot;Язык программирования C++ вводный курс&quot; 4...

Статические функции-члены - хорошо или плохо?
Всем привет. Приведу пример такой архитектуры. Есть базовый интерфейс. От...

Как правильно инициализировать статические члены класса?
Я новичок и заранее прошу прощение за тупые вопросы. Имеются два класса:...


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

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

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