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

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

Войти
Регистрация
Восстановить пароль
 
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
#1

вложенные классы - C++

18.03.2013, 11:55. Просмотров 638. Ответов 4
Метки нет (Все метки)

Здорова господа!
Снова мучаю класс String еще не замучал.
Не могу скомпилировать программу с вложенным классом вот код:
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
#include <iostream>
using std::cout;
using std::endl;
 
class String
{
    struct Srep;//predctavlenie
    Srep* rep;//ykazatel6
    
public:
    void read(int i)
    {
        cout <<rep->s[i];
    }   
    
};
 
struct String::Srep
{
    char* s;//ctroka
    int sn;//kol cimvolov
};
 
int main()
{
    
    
    return 0;
}
Я взял кусочек смоделировал ошибку которая у меня вылазит, от сама ошибка:

./test8.cpp: В функции-члене «void String::read(int)»:
./test8.cpp:13:13: ошибка: invalid use of incomplete type «struct String::Srep»
./test8.cpp:7:9: ошибка: forward declaration of «struct String::Srep»


Ну теперь о самой сути в обрамляющем классе вложенный класс можно просто объявить, а определить можно и за пределами класса, что я и сделал, так почему же у меня вылазит ошибка? (Это не я придумал это в книге так написано, а на практике фигня выходит).

Кода создаю определение класса внутри String, то компилится как положено.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 11:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос вложенные классы (C++):

Вложенные классы - C++
class A { private: B b_class; int a; public: A(); }; class B

Вложенные классы - C++
Где можно почитать нормальную информацию о них? Читаю книгу С.Праты там непонятно что(привел внизу скрин таблицы, которую я вообще не...

Вложенные классы!! - C++
НЕ могу разобраться ка это работает!!! приведите пожалуйста простой пример как это работает с реализацией класса

Шаблоны и вложенные классы - синтаксис - C++
Пишу класс бинарного красно черного дерева, решил сделать структуру узла в нем вложенной, но столкнулся с проблемой непонимания синтаксиса...

Перегрузка операция + вложенные классы - C++
Уже второй раз прошу помощи, никто толком не может помочь( Как правильно реализовать операцию &quot;-&quot; класса Time в таком примере? ...

Вложенные в друг друга классы - C++
Есть исходный код: class1.h #pragma once #include &quot;class2.h&quot; class class1 { private: class2* c2; public: ...

4
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
18.03.2013, 12:06 #2
В 13 строке на момент обращения к полю структуры еще нет определения самой структуры, отсюда и ошибка. Предлагаю сделать две вещи:
1) раскидать код по файлам, компилировать отдельно;
2) писать нормальные комментарии, а не в стиле "ctroka".

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от ninja2 Посмотреть сообщение
C++
1
void read(int i) { cout <<rep->s[i]; }
Напомнило фрагмент доклада Андрея Аксенова, где он говорил, что у некоторых разработчиков в голове нечто вроде макаронного монстра. И там он приводит пример именно такого именования методов.

1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.03.2013, 16:03  [ТС] #3
Цитата Сообщение от 0x10 Посмотреть сообщение
В 13 строке на момент обращения к полю структуры еще нет определения самой структуры, отсюда и ошибка. Предлагаю сделать две вещи:
1) раскидать код по файлам, компилировать отдельно;
2) писать нормальные комментарии, а не в стиле "ctroka".
ну и как же мне его разбить?
Я пробовал String.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef STRING_H
#define STRING_H
 
#include <iostream>
using std::cout;
 
class String
{
    struct Srep;//predctavlenie
    Srep* rep;//ykazatel6
    
public:
    void read(int i)
    {
        cout <<rep->s[i];
    }   
    
};
 
#endif
и String.cpp

C++
1
2
3
4
5
6
7
#include "String2.h"
 
struct String::Srep
{
    char* s;//ctroka
    int sn;//kol cimvolov
};
при g++ ./String.cpp -c
ошибку туже выводит

А по другому я даже не знаю на какие файлы разбить. Класс Srep вложенный его ж отдельно нельзя создавать или хз.
0
Croessmah
Ушел
Эксперт CЭксперт С++
13554 / 7705 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 1
18.03.2013, 16:04 #4
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
#include <iostream>
using std::cout;
using std::endl;
 
class String
{
    struct Srep;//predctavlenie
    Srep* rep;//ykazatel6
    
public:
    void read(int i);
    
};
 
struct String::Srep
{
    char* s;//ctroka
    int sn;//kol cimvolov
};
     void String::read(int i)
    {
        cout <<rep->s[i];
    }   
int main()
{
    
    
    return 0;
}
1
ninja2
231 / 187 / 7
Регистрация: 26.09.2012
Сообщений: 2,018
Завершенные тесты: 1
18.03.2013, 16:10  [ТС] #5
Croessmah, Молодец! Я б фиг бы додумался в книге именно так имелось в виду, то я просто уже чуток переделал неправильно.
0
18.03.2013, 16:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2013, 16:10
Привет! Вот еще темы с ответами:

Вложенные классы. Что за синтаксис такой? - C++
Всем привет! Писал код с вложенным классом, столкнулся с таким синтаксисом: template &lt;typename Type&gt; class ExternalClass { ...

Композиция двух классов и вложенные классы - C++
Привет, народ! Собственно говоря вот задача. Существуют 2 класса: 1. Создать класс LongLong для работы с целыми числами из 64 бит....

"вложенные классы" - C++
Не знаю как правильно это называет, так что извиняйте. К примеру есть такая конструкция float Time = Clock.GetElapsedTime().asSeconds();...

Непонятна тема (Классы содержащие другие классы, как данные члены ) - C++
Изучаю книгу Джесс Либерти(в частности эту главу в данный момент) #include &lt;iostream&gt; class Point { public: void SetX(int...


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

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

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