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

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

Войти
Регистрация
Восстановить пароль
 
No10
30 / 28 / 2
Регистрация: 03.06.2010
Сообщений: 465
#1

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

17.06.2012, 19:27. Просмотров 513. Ответов 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++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int N,i=1,min,max; int a=1; int sum=0; int j=0; ...

ошибка в коде - C++
#include &lt;string.h&gt; #include &lt;iostream&gt; #include &lt;stdio.h&gt; int main() { char m1=&quot;=id&quot;; char m2; char...

Ошибка в коде - C++
Помогите, пожалуйста! Написала код программы на С++ и нажала отладку, а он мне выдает ошибку &quot;Не удается запустить программу...

Ошибка в коде - C++
Не могу исправить ошибку в 12 и 13 строке, прошу помочь. //programma podbora parol9 #include &lt;iostream&gt; using std::cout; using...

Ошибка в коде - C++
#include &lt;stdio.h&gt; void main() { int num; scanf(&quot;%x&quot;,&amp;num); printf(&quot;%o\n&quot;,num); printf(&quot;%x\n&quot;,num«2); -тут ошибка(красным...

Ошибка в коде - C++
Помогите пожалуйста найти ошибку #include &quot;stdafx.h&quot; #include&lt;iostream&gt; #include&lt;cmath&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt;...

Ошибка в коде - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; #define N 3 #define M 3 using namespace std; int main() { int...

C++ ошибка в коде - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; int main(){ double a=1.2; double b=2.7; cout&lt;&lt; avg (a, b);...

Ошибка в коде - C++
Задача: Получить максимальную по длине неубывающую под последовательность цифр введенного числа. Ошибка возникает в случае если эта под...

Ошибка в коде - C++
Всем привет! Пишу программу на языке с++ . Надо найти общее количество отрицательных элементов в массивах Х, Y, Z. Вот что я...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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;
}
Ответ Создать тему
Опции темы

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