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

Ошибка в коде - C++

Восстановить пароль Регистрация
 
No10
 Аватар для No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
17.06.2012, 19:27     Ошибка в коде #1
Долго сижу и никак не могу понять в чём ошибка. Вот 3 файла. Они подключены правильно и работают.
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include "string2.h"
 
using namespace std;
 
int main()
{
    String s1("pozdravlyaem"), s2(" s dnem rozdenia"), s3("");
 
    return 0;
}
string2.h
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
#ifndef STRING2_H
#define STRING2_H
 
#include <iostream>
 
using namespace std;
 
class String {
        friend ostream operator<< (ostream &, const String &);
        friend istream operator>> (istream &, String &);
    public:
        String(const char * = "");
        String(const String &);
        ~String();
        const String &operator=(const String &);
        String &operator+=(const String &); // сцепление или конкатенация
        int operator!() const;
        int operator== (const String &) const;
        int operator!= (const String &) const;
        int operator< (const String &) const;
        int operator> (const String &) const;
        int operator<= (const String &) const;
        int operator>= (const String &) const;
        char &operator[](int);
        String operator()(int, int);
        int getLenght() const;
 
    private:
        char *sPtr;
        int lenght;
 
};
 
#endif // STRING2_H
string2.cpp
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
#include <iostream>
#include <iomanip>
#include <string.h>
#include <assert.h>
#include <windows.h>
#include <math.h>
#include "string2.h"
 
using namespace std;
 
char bufRus[256];
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
 
String::String(const char *s)
{
    cout << Rus("Конструктор преобразования: ") << s << endl;
    lenght = strlen(s);
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, s);
}
 
String::~String()
{
    cout << Rus("Деструктор: ") << sPtr << endl;
    delete [] sPtr;
}
 
const String &String::operator=(const String &right)
{
    cout << Rus("Вызов operator=") << endl;
 
    if (&right != this) {
        delete [] sPtr;
        lenght = right.lenght;
        sPtr = new char[lenght + 1];
        assert(sPtr != 0);
        strcpy(sPtr, right.sPtr);
    }
    else { cout << Rus("Попытка самоприсваивания String.") << endl; }
 
    return *this;
}
 
String &String::operator+=(const String &right)
{
    char *tempPtr = sPtr;
    lenght += right.lenght;
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, tempPtr);
    strcat(sPtr, right.sPtr);
    delete [] tempPtr;
 
    return *this;
}
 
int String::operator!() const { return lenght == 0;}
 
int String::operator== (const String &right) const
{
    return strcmp(sPtr, right.sPtr) == 0;
}
 
int String::operator!=(const String &right) const
{
    return strcmp(sPtr, right.sPtr) != 0;
}
 
int String::operator< (const String &right) const
{
    return strcmp(sPtr, right.sPtr) < 0;
}
 
int String::operator> (const String &right) const
{
    return strcmp(sPtr, right.sPtr) > 0;
}
 
int String::operator<= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) <= 0;
}
 
int String::operator>= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) >= 0;
}
 
char &String::operator[] (int subscript)
{
    assert(subscript >= 0 && subscript < lenght);
    return sPtr[subscript];
}
 
String String::operator() (int index, int subLenght)
{
    assert(index >= 0 && index < lenght && subLenght >= 0);
    String sub;
 
    if ((subLenght == 0) || (index + subLenght > lenght))
        sub.lenght = lenght - index + 1;
    else
        sub.lenght = subLenght + 1;
 
    delete sub.sPtr;
    sub.sPtr = new char [sub.lenght];
    assert(sub.sPtr != 0);
 
    strncpy(sub.sPtr, &sPtr[index], sub.lenght);
    sub.sPtr[sub.lenght] = '\0';
 
    return sub;
}
 
int String::getLenght() const { return lenght; }
 
ostream &operator<< (ostream &output, const String &s)
{
    output << s.sPtr;
    return output;
}
 
istream &operator>> (istream &input, String &s)
{
    char temp[100];
    input >> setw(100) >> temp;
    s = temp;
    return input;
}
А ошибки собсвенно такие:
C++
1
2
3
4
5
6
7
8
9
 C++\well\string2.cpp||In function 'std::ostream& operator<<(std::ostream&, const String&)':|
 C++\well\string2.cpp|121|error: new declaration 'std::ostream& operator<<(std::ostream&, const String&)'|
 C++\well\string2.h|9|error: ambiguates old declaration 'std::ostream operator<<(std::ostream&, const String&)'|
 C++\well\string2.h|29|error: 'char* String::sPtr' is private|
 C++\well\string2.cpp|123|error: within this context|
 C++\well\string2.cpp||In function 'std::istream& operator>>(std::istream&, String&)':|
 C++\well\string2.cpp|127|error: new declaration 'std::istream& operator>>(std::istream&, String&)'|
 C++\well\string2.h|10|error: ambiguates old declaration 'std::istream operator>>(std::istream&, String&)'|
||=== Build finished: 6 errors, 0 warnings ===|
Никак не могу разобраться!!! Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2012, 19:27     Ошибка в коде
Посмотрите здесь:

Ошибка в коде. C++
C++ Ошибка в коде
Ошибка в коде C++
C++ ошибка в коде ?
C++ Ошибка в коде
C++ Ошибка в коде
C++ Ошибка в коде
C++ Ошибка в коде

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
softmob
1248 / 698 / 155
Регистрация: 20.02.2010
Сообщений: 1,035
17.06.2012, 20:00     Ошибка в коде #2
Цитата Сообщение от No10 Посмотреть сообщение
C++
1
2
friend ostream operator<< (ostream &, const String &);
friend istream operator>> (istream &, String &);
C++
1
2
friend ostream& operator<< (ostream&, const String&);
friend istream& operator>> (istream&, 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
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
163
164
165
166
167
#include <iostream>
#include <iomanip>
#include <string.h>
#include <assert.h>
#include <windows.h>
using namespace std;
 
class String 
{
public:
    friend ostream& operator<< (ostream &, const String &);
    friend istream& operator>> (istream &, String &);
    String(const char * = "");
    String(const String &);
    ~String();
    const String &operator=(const String &);
    String &operator+=(const String &); // сцепление или конкатенация
    int operator!() const;
    int operator== (const String &) const;
    int operator!= (const String &) const;
    int operator< (const String &) const;
    int operator> (const String &) const;
    int operator<= (const String &) const;
    int operator>= (const String &) const;
    char &operator[](int);
    String operator()(int, int);
    int getLenght() const;
private:
    char *sPtr;
    int lenght;
};
 
char bufRus[256];
char* Rus(char* text) 
{   
    CharToOemA(text, bufRus);
    return bufRus;
}
 
String::String(const char *s)
{
    cout << Rus("Конструктор преобразования: ") << s << endl;
    lenght = strlen(s);
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, s);
}
 
String::~String()
{
    cout << Rus("Деструктор: ") << sPtr << endl;
    delete [] sPtr;
}
 
String::String( const String& s ):
    lenght( s.lenght ), sPtr( new char[lenght] )
{
    strcpy( sPtr, s.sPtr );
}
 
const String &String::operator=(const String &right)
{
    cout << Rus("Вызов operator=") << endl;
 
    if (&right != this) {
        delete [] sPtr;
        lenght = right.lenght;
        sPtr = new char[lenght + 1];
        assert(sPtr != 0);
        strcpy(sPtr, right.sPtr);
    }
    else { cout << Rus("Попытка самоприсваивания String.") << endl; }
 
    return *this;
}
 
String &String::operator+=(const String &right)
{
    char *tempPtr = sPtr;
    lenght += right.lenght;
    sPtr = new char[lenght + 1];
    assert(sPtr != 0);
    strcpy(sPtr, tempPtr);
    strcat(sPtr, right.sPtr);
    delete [] tempPtr;
 
    return *this;
}
 
int String::operator!() const { return lenght == 0;}
 
int String::operator== (const String &right) const
{
    return strcmp(sPtr, right.sPtr) == 0;
}
 
int String::operator!=(const String &right) const
{
    return strcmp(sPtr, right.sPtr) != 0;
}
 
int String::operator< (const String &right) const
{
    return strcmp(sPtr, right.sPtr) < 0;
}
 
int String::operator> (const String &right) const
{
    return strcmp(sPtr, right.sPtr) > 0;
}
 
int String::operator<= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) <= 0;
}
 
int String::operator>= (const String &right) const
{
    return strcmp(sPtr, right.sPtr) >= 0;
}
 
char &String::operator[] (int subscript)
{
    assert(subscript >= 0 && subscript < lenght);
    return sPtr[subscript];
}
 
String String::operator() (int index, int subLenght)
{
    assert(index >= 0 && index < lenght && subLenght >= 0);
    String sub;
    if ((subLenght == 0) || (index + subLenght > lenght))
        sub.lenght = lenght - index + 1;
    else
        sub.lenght = subLenght + 1;
 
    delete sub.sPtr;
    sub.sPtr = new char [sub.lenght];
    assert(sub.sPtr != 0);
 
    strncpy(sub.sPtr, &sPtr[index], sub.lenght);
    sub.sPtr[sub.lenght] = '\0';
 
    return sub;
}
 
int String::getLenght() const { return lenght; }
 
ostream& operator<< (ostream &output, const String &s)
{
    output << s.sPtr;
    return output;
}
 
istream& operator>> (istream &input, String &s)
{
    char temp[100];
    input >> setw(100) >> temp;
    s = temp;
    return input;
}
 
int main()
{
    String s1("pozdravlyaem"), s2(" s dnem rozdenia"), s3("");
    return 0;
}
Yandex
Объявления
17.06.2012, 20:00     Ошибка в коде
Ответ Создать тему
Опции темы

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