Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.79/14: Рейтинг темы: голосов - 14, средняя оценка - 4.79
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
1

Объект класса string не является однозначным

18.02.2016, 08:23. Просмотров 2787. Ответов 12
Метки нет (Все метки)

Вот ошибка:
Ошибка 1 error C2872: left: неоднозначный символ c:\users\м\desktop\documents\visual studio 2013\projects\млита\млита\метод вонга.cpp 33 1 МЛиТА

и таких около 100 штук где используется два объекта left and right. Вчера успешно закрыл программу после тестирования пару примеров. Сегодня открыл вот эта жуть.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2016, 08:23
Ответы с готовыми решениями:

как узнать,является данный объект класса А1 наследником класса А2
Всем привет)есть классы S, A1, A2, B1, B2. Иерархия наследования следующая ...

Строки как объект специального класса string
Помогите исправить ошибку в коде ,программа должна выводить одинаковые...

Выделить в памяти объект класса string и присвоить ему значение
Здравствуйте! Я доучился :-( Дошел до полиморфизма и сдал проект и не знаю...

Создать класс. Символьное поле должно быть задано как объект класса string
решите задачку!) 6. Создать класс. Символьное поле должно быть задано как...

Создайте класс employee, который содержит имя (объект класса string) и номер (типа long) служащего
Создайте класс employee, который содержит имя (объект класса string) и но- мер...

12
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 14:42 2
Цитата Сообщение от MuslimPalit Посмотреть сообщение
Ошибка 1 error C2872: left: неоднозначный символ c:\users\м\desktop\documents\visual studio 2013\projects\млита\млита\метод вонга.cpp 33 1 МЛиТА
MuslimPalit, А теперь позвони врачу и скажи: "Доктор, у меня что-то болит". И пусть он поставит тебе так диагноз.
5
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
18.02.2016, 16:50  [ТС] 3
_Valera_, я все подробно выложил, или мне код закинуть?

Добавлено через 8 минут
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
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include <iostream>
#include <conio.h>
#include <string>
#include <algorithm>
#include <ctype.h>
using namespace std;
 
string right;
string left;
 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
void SetRussianLocale() { setlocale(LC_ALL, "Russian"); }
void tips();
 
void stepImpl();
void stepInv();
void clearSpace();
void swapDizCon();
 
int main() {
 
    SetRussianLocale();
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    tips();
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    //(A^B)v(C>D)~B^C
    // шаг 1!
    cout << "Введите значения по отношению!";
    cout << "\nВведите отношение слева: ";
    cin >> left;
    cout << "\nВведите отношение справа: ";
    cin >> right;
 
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    // шаг 2!
    stepImpl();
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    // шаг 4!
    stepInv();
    ////////////////////////////////////////////////////////////////////////////////////////////////////////
    // шаг 6!
 
    /////////////////////////////////////////////////////////////////////////////////////////////////////
    // шаг 11!
    swapDizCon();
    /////////////////////////////////////////////////////////////////////////////////////////////////
    // шаг 12!
 
    for (unsigned int i = 0; i < left.length() - 1; ++i) {
 
        for (unsigned int k = i + 1; k < left.length(); ++k) {
            // шаг 13!
            if ((left[k] == ',') && (left[i] == left[k + 1])) {
 
                left[i] = ' ';
                left.erase(left[i], left[i + 1]);
            }
        }
    }
    for (unsigned int j = 0; j < right.length() - 1; ++j) {
 
        for (unsigned int k = j + 1; k < right.length(); ++k) {
            // шаг 13!
            if ((right[k] == ',') && (right[j] == right[k + 1])) {
 
                right[j] = ' ';
                left.erase(left[j], left[j + 1]);
            }
        }
    }
 
    cout << left << "=>" << right;
    cout << endl;
    cout << endl;
    /////////////////////////////////////////////////////////////////////////////////////////////////////
 
    _getch();
    return 0;
}
 
 
void tips() {
 
    cout << "\t\t\t\tИнструкция юзера.\n";
    cout << "\t\t\t\t^ - конъюнкция\n";
    cout << "\t\t\t\tv - дизъюнкция\n";
    cout << "\t\t\t\t> - импликация\n";
    cout << "\t\t\t\t, - запятая\n";
    cout << "\t\t\t\tx - инверсия X\n";
    cout << "\t\t\t\t! - общая инверсия(перед формуло)\n";
    cout << " Пожалуйста, вводите символы латинских букв и изображенных логических операций!\n\n\n";
}
void stepImpl(){
    
    for (unsigned int i = 0; i < left.length(); ++i) {
        // шаг 3!
        if (left[i] == '>') {
 
            left[i] = 'v';
            left[i - 1] = tolower(left[i - 1]);
        }
    }
    for (unsigned int j = 0; j < right.length(); ++j) {
        // шаг 3!
        if (right[j] == '>') {
 
            right[j] = 'v';
            right[j - 1] = tolower(right[j - 1]);
        }
    }
    cout << left << "=>" << right;
    cout << endl;
    cout << endl;
}
void stepInv(){
    
    for (unsigned int i = 0; i < left.length(); ++i) {
        // шаг 5!
        if (left[i] == '!') {
 
            if (left[i + 2] == 'v') {
 
                left[i] = ' ';
                left[i + 1] = tolower(left[i + 1]);
                left[i + 2] = '^';
                left[i + 3] = tolower(left[i + 3]);
            }
            if (left[i + 2] == '^') {
 
                left[i] = ' ';
                left[i + 1] = tolower(left[i + 1]);
                left[i + 2] = 'v';
                left[i + 3] = tolower(left[i + 3]);
            }
        }
    }
    for (unsigned int j = 0; j < right.length(); ++j) {
        // шаг 5!
        if (right[j] == '!') {
 
            if (right[j + 2] == 'v') {
 
                right[j] = ' ';
                right[j + 1] = tolower(left[j + 1]);
                right[j + 2] = '^';
                right[j + 3] = tolower(left[j + 3]);
            }
            if (right[j + 2] == '^') {
 
                right[j] = ' ';
                right[j + 1] = tolower(left[j + 1]);
                right[j + 2] = 'v';
                right[j + 3] = tolower(left[j + 3]);
            }
        }
    }
    cout << left << "=>" << right;
    cout << endl;
    cout << endl;
}
void clearSpace() {
    
    // исключение пробела
    for (unsigned int i = 0; i < left.length(); ++i)
 
        if (left[i] == ' ')
 
            left.erase(left.begin() + i);
 
    for (unsigned int j = 0; j < right.length(); ++j)
 
        if (right[j] == ' ')
 
            right.erase(right.begin() + j);
 
    cout << left << "=>" << right;
    cout << endl;
    cout << endl;
}
void swapDizCon() {
    
    for (unsigned int i = 0; i < left.length(); ++i) {
 
        for (unsigned int j = 0; j < right.length(); ++j) {
 
            if (left[i] == '^' && right[j] == 'v') {
 
                left[i] = ',';
                right[j] = ',';
            }
        }
    }
 
    cout << left << "=>" << right;
    cout << endl;
    cout << endl;
 
}
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 17:24 4
Лучший ответ Сообщение было отмечено MuslimPalit как решение

Решение

https://msdn.microsoft.com/ru-ru/library/t57wswcs.aspx
Все вполне ясно описано.
Выход:
C++
1
2
3
4
using std::string;
using std::cout;
using std::cin;
и тд...
или назвать переменные иначе.
2
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
18.02.2016, 17:27  [ТС] 5
_Valera_,
причина в чем? Я вчера протестировал программу после успешных выводов оставил для доработки, сегодня захожу и вот тебе. Вынес глобально и не показывают, сделал локально вроде бы все нормально но после запуска та же ошибка. Почему так случилось?
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 17:29 6
Цитата Сообщение от MuslimPalit Посмотреть сообщение
причина в чем?
в том что кто-то не читает ссылки, которые ему дают.

Ошибка C2872 может возникать, если в файле заголовка используется Директива using (C++), а в последующем файле заголовка, включенном с помощью директивы #include, содержится тип, также входящий в пространство имен, указанное в директиве using
https://msdn.microsoft.com/ru-ru/library/t57wswcs.aspx

left:
http://www.cplusplus.com/reference/ios/left/
right:
http://www.cplusplus.com/reference/ios/right/
1
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
18.02.2016, 17:38  [ТС] 7
_Valera_, код ведь понятен, логических ошибок нет, в нем. Можешь проверить функцию где я пробелы убираю, вроде и там все правильно. Он останавливается компилить на 13шаге, я помню точно он компилил его раз 10 вчера

Добавлено через 1 минуту
_Valera_, я не понимаю тебя, до сих пор так подключал пространство и ничего подобного не выводил

Добавлено через 2 минуты
_Valera_, ну я понял твои статьи у меня ведь ничего такого нет, я всегда так и работал!

Добавлено через 3 минуты
_Valera_, и все же я не вижу зависимость между названиями
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 17:38 8
Цитата Сообщение от MuslimPalit Посмотреть сообщение
до сих пор так подключал пространство и ничего подобного не выводил
Жизнь не предсказуемая штука, а С++ так вобще.
В любом случае тебе придется играть по правилам компилятора.

Цитата Сообщение от MuslimPalit Посмотреть сообщение
ну я понял твои статьи
плохо понял, читай еще.

Цитата Сообщение от MuslimPalit Посмотреть сообщение
у меня ведь ничего такого нет
если не было бы, то я б не скинул.

Цитата Сообщение от MuslimPalit Посмотреть сообщение
я всегда так и работал!
Значит ты работал не правильно. И вобще глобальные переменный, да еще и в заголовочном файле это Г*код. Пространство имен так подключать тоже Г*код. Это все опасно!
0
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
18.02.2016, 17:41  [ТС] 9
_Valera_, я ведь говорю я больше изучаю язык, а не рефакторингом занимаюсь, ну я понял на какую ошибку ты указал. Я сам это подозревал, но ошибка вышла сегодня, а работал я над ним вчера и без проблем вот в чем суета
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 17:43 10
Цитата Сообщение от MuslimPalit Посмотреть сообщение
и все же я не вижу зависимость между названиями
у тебя в группе есть два Пети. И ты позвал: "Петя!". Повернулись оба, почему? А потому что имена у них одинаковые, а фамилии разные. Вот и теперь поставь в журнал оценку где только есть одни имена. Не можешь? и компилятор тоже.

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

Не по теме:

MuslimPalit, все, я устал. Включай мозг!

1
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
18.02.2016, 17:45  [ТС] 11
_Valera_, просто лень каждый раз указывать пространство std:: и вообще многие так и делают я то новичок но я не про себя. Да и глобальные переменные string я встречал много глобальных
0
_Valera_
490 / 372 / 136
Регистрация: 27.01.2015
Сообщений: 1,588
18.02.2016, 17:46 12
Цитата Сообщение от MuslimPalit Посмотреть сообщение
лень каждый раз указывать пространство std::
цикл заметил?
лень -> ошибки -> вопрос на форуме ->лень -> ошибки...
1
MuslimPalit
30 / 6 / 9
Регистрация: 23.03.2015
Сообщений: 508
18.02.2016, 18:02  [ТС] 13
_Valera_, ну я разбирал эту тему с библиотеками и подключал pragmu но тут не думал что такое бывает, до сих пор какую-то странность ощущаю

Добавлено через 2 минуты
_Valera_, что? Просто объявить сразу пространство легче

Добавлено через 13 минут
_Valera_, прога работает как конфетка, спасибо за советы
0
18.02.2016, 18:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.02.2016, 18:02

Ошибка компиляции: "ref" не является однозначным
Двадцать ошибок и все как одна -- &quot;ref&quot; не является однозначным. Помогите, мне...

Странная ошибка volatile int count - count не является однозначным. Ещё про CloseHandle - для чего это?
Странная ошибка volatile int count - count не является однозначным. Ещё про...

"cout" не является однозначным С++
Добрый день, при написании кода я столкнулся с проблемой, cout везде выбивает &quot;...


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

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

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