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

Шаблон класса строк - ошибка компиляции - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Явная специализация, зачем она нужна?(Шаблоны функций) http://www.cyberforum.ru/cpp-beginners/thread923763.html
Какой смысл в явной специализации, когда есть перегрузка? если можно, и примерчик) я себе уже в голову вбил, и тут надо чем-то тяжелым выбивать, что специализация - нужная вещь XD и если можно,...
C++ Bool Обьясните мне, как они pаботают и где их пpименять =( Вот с помощью учебника написал пpогу #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv)... http://www.cyberforum.ru/cpp-beginners/thread923755.html
C++ Задачка на вывод чисел на естественном языке
Составить программу, которая читает натуральное число в десятичном представлении, а на выходе выдаёт это же число в десятичном представлении и на естественном языке. вот от 0-99 получилось вроде...
Змейка C++
Можно пожалуйста самую простую змейку консольную на c++ вобще самую простую без очков без всяких дополнений просто змейка ограда для нее и яблочко
C++ Ошибка в простой программе http://www.cyberforum.ru/cpp-beginners/thread923703.html
#include<iostream> #include<string> using namespace std; string recyrs() { string parol,parol1="12345"; cout << "Vvedit parol" <<endl; cin >> parol;
C++ Модель движения КА в центральном поле тяготения Модель движения КА в центральном поле тяготения Рассмотрим модельную задачу, которая в небесной механике называется задачей двух тел и изучает движение двух материальных точек под действием силы их... подробнее

Показать сообщение отдельно
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056

Шаблон класса строк - ошибка компиляции - C++

16.07.2013, 01:07. Просмотров 393. Ответов 3
Метки (Все метки)

Добрый вечер. Пытаюсь выполнить упражнение с учебника. Gcc выдаёт следующее:
Bash
1
/home/ilyuha21st/Projects/qtcreator/cpp_some1/main.cpp:148: error: need 'typename' before 'String<C>::Cref' because 'String<C>' is a dependent scope
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
#include <iostream>
#include <cstring>
 
template<class C>
class String
{
    struct Srep;
    Srep* rep;
    class Cref;
 
public:
    String();
    String(const C *);
    String(const String &);
    ~String();
    String& operator = (const String &);
    C operator[](int) const;
    Cref operator[](int);
 
    int size() const;
    const C* c_rep() const;
};
 
/************** String::Srep **************/
 
template<class C>
struct String<C>::Srep
{
    C* s;
    int sz;
    int n;
 
    Srep();
    Srep& operator = (const Srep& obj);
 
    Srep(int ssz, const C* ss)
    {
        n = 1;
        sz = ssz;
        int copy_size = sizeof(C)*sz + 1;
        s = new C[copy_size];
        memcpy(s, ss, sizeof(C)*sz);
        s[copy_size] = '\n';
    }
 
    ~Srep() { delete [] s; }
 
    Srep* get_own_copy()
    {
        return new Srep(sz, s);
    }
};
 
/*********** String::String ************/
 
template<class C>
String<C>::String()
{
    rep = new Srep(0, "");
}
 
template<class C>
String<C>::String(const C* str)
{
    int i = 0;
    for (const C* pt = str; *reinterpret_cast<const char*>(pt) != '\n'; ++pt)
    {
        ++i;
    }
    rep = new Srep(sizeof(C)*i, str);
}
 
template<class C>
String<C>::String(const String& obj)
{
    rep = obj.rep->get_own_copy();
}
 
template<class C>
String<C>& String<C>::operator = (const String& obj)
{
    if (&obj == this)
    {
        return *this;
    }
    if (rep->n == 1)
    {
        delete rep;
    }
    rep = obj.rep;
    ++rep->n;
    return *this;
}
 
template<class C>
String<C>::~String()
{
    if (--rep->n == 0)
    {
        delete rep;
    }
}
 
template<class C>
int String<C>::size() const
{
    return rep->sz;
}
 
template<class C>
const C* String<C>::c_rep() const
{
    return rep->s;
}
 
template<class C>
C String<C>::operator[](int offset) const
{
    return rep->s[offset];
}
 
/************ String::Cref *************/
 
template<class C>
class String<C>::Cref
{
    friend class String;
 
    String& s;
    int sz;
 
    Cref();
    Cref(const Cref& r) : s(r.s), sz(r.sz) {}
    Cref& operator = (const Cref& obj);
    Cref(String& ss, int ssz) : s(ss), sz(ssz) {}
 
public:
    operator C()
    {
        return s[sz];
    }
};
 
 
/************ String::String *************/
 
template<class C>
String<C>::Cref String<C>::operator[](int offset)
{
    return Cref(*this, offset);
}
 
/************* main() **************/
 
typedef String<char> string;
 
int main()
{
    string s("Hello world");
    string s2 = s;
    std::cout << s2.c_rep() << std::endl;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru