Ошибка активно e0266 system не является однозначным

Программа по вычислениям полностью устраивает, она перемножает 2 матрицы указанного размера с рандомными числами, она запускается и правильно считает, но показывает, что есть ошибки типа: cin, cout, system не являются однозначными, всего 17 ошибок, подчеркивает красным эти операторы, как это убрать?

#include <iostream>
#include <ctime>
#include <iomanip>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
int** P1, ** P2, ** P3, n, m;
cout << "Введите кол-во строк матрицы: ";
cin >> n;
cout << "Введите кол-во столбцов матрицы: ";
cin >> m;
P1 = new int* [n];
for (int i = 0; i < n; i++)
    P1[i] = new int[m];
srand(time(0));
for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++)  //рандом 1 матрицы
        P1[i][j] = rand() % 10;
for (int i = 0; i < n; i++)
{
    cout << endl;                  //вывод 1 матрицы
    for (int j = 0; j < m; j++)
    {
        cout << setw(3) << P1[i][j] << "\t";
    }
}
cout << endl;
int k;
cout << "Введите кол-во столбцов 2 матрицы: ";
cin >> k;
P2 = new int* [k];
for (int i = 0; i < m; i++)
    P2[i] = new int[k];
for (int i = 0; i < m; i++)
    for (int j = 0; j < k; j++)  //рандом 2 матрицы
        P2[i][j] = rand() % 10;
for (int i = 0; i < m; i++)
{
    cout << endl;                  //вывод 2 матрицы
    for (int j = 0; j < k; j++)
    {
        cout << setw(3) << P2[i][j] << "\t";
    }
}
cout << endl;
P3 = new int* [n];
for (int i = 0; i < n; i++)
    P3[i] = new int[k];
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < k; j++)  //умножение матриц
    {
        P3[i][j] = 0;
        for (int z = 0; z < m; z++)
            P3[i][j] = P3[i][j] + P1[i][z] * P2[z][j];
    }
}
cout << endl << "Результат умножения:" << endl;
for (int i = 0; i < n; i++)                     //вывод результата 
 умножения
{
    cout << endl;
    for (int j = 0; j < k; j++)
        cout << setw(3) << P3[i][j] << "\t";
}
cout << endl;
for (int i = 0; i < n; i++)
    delete[] P1[i];
delete[] P1;
for (int i = 0; i < m; i++)
    delete[] P2[i];
delete[] P2;
for (int i = 0; i < n; i++)
    delete[] P3 [i];
delete[] P3;
system("pause");
return 0;
}

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
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
#include <SFML/Graphics.hpp>
#include <iostream>
#include <Windows.h>
#include <vector>
#include "Help_File.h"
#include <string>
#include "tinyxml-master/tinyxml.h"
 
using namespace std;
using namespace sf;
 
int W = GetSystemMetrics(SM_CXSCREEN) / 1.3;
int Block_Size = W / 50;
int H = Block_Size * 30;
int Colichestvo_kart = 2;
Clock clock1;
 
float Timer()
{
    float time1 = clock1.getElapsedTime().asMicroseconds();
    clock1.restart();
    time1 = time1 / 800;
    return time1;
}
 
void DrawRectangle(RenderTarget& window, int x, int y, int h = Block_Size, int w = Block_Size, int a = 66, int b = 66, int c = 66) {
    RectangleShape rectangle(Vector2f(w, h));
    rectangle.move(x, y);
    rectangle.setFillColor(Color(a, b, c));
    window.draw(rectangle);
}
 
class Player {
public:
    float x = 0;
    float y = 0;
    float on_the_ground = 0;
    
    void Move() {
        float timer = Timer();
        if ((Keyboard::isKeyPressed(Keyboard::Right))) { x = x + timer * 0.3; }
        if ((Keyboard::isKeyPressed(Keyboard::Left))) { x = x - timer * 0.3;  }
        if ((Keyboard::isKeyPressed(Keyboard::Down))) { y = y + timer * 0.3; }
        if ((Keyboard::isKeyPressed(Keyboard::Up))) { y = y - timer * 0.3; }
    }
    void go() {
    }
};
Player player;
 
class Map {
public:
    int H_map = 1;
    int W_map = 1;
    int W_map_left = 1;
    int H_map_left = 1;
    int W_map_right = 1;
    int H_map_right = 1;    
    vector<int> map;
    vector<int> map_left;
    vector<int> map_right;
    int N = 1;
    int N2 = 1;
    bool start = 0;
 
    void Clear_vector() {
        vector<int>::iterator it;
        int a = map.size();
        for (int i = 0; i < a; i++) {
            it = map.begin();            
            map.erase(it);
        }
        a = map_left.size();
        for (int i = 0; i < a; i++) {
            it = map_left.begin();
            map_left.erase(it);
        }
        a = map_right.size();
        for (int i = 0; i < a; i++) {
            it = map_right.begin();
            map_right.erase(it);
        }
    }
 
    void Read_XML(int n) {
        H_map = 0;
        W_map = 1;
        TiXmlDocument file("Platformer\\Maps.xml");
        file.LoadFile();
 
        TiXmlElement* head;
        head = file.FirstChildElement("Maps");
 
        string a;
        a = head->FirstChildElement("Map" + to_string(n))->GetText();
        for (int i = 0; i < a.length(); i++) {
            if (a[i] == ',')
                W_map++;
            if (a[i] == ';') {
                H_map++;
                if (i < a.length() - 1)
                W_map = 0;
            }
        }
        Clear_vector();
        int l = 0;
        for (int k = 0; k < a.length(); k++) {
            if (Zamena(int(a[k])) >= 0) {
                l = l * 10 + Zamena(a[k]);
            }
            if (int(a[k]) == 44) {  //,
                map.push_back(l);
                l = 0;
            }
            if (int(a[k]) == 59) {  //;
                l = 0;
            }
        }
 
        H_map_right = 0;
        W_map_right = 1;        
        int n2 = n;
        n2++;
        if (n2 > Colichestvo_kart) n2 = 1;
        a = head->FirstChildElement("Map" + to_string(n2))->GetText();
        for (int i = 0; i < a.length(); i++) {
            if (a[i] == ',')
                W_map_right++;
            if (a[i] == ';') {
                H_map_right++;
                if (i < a.length() - 1)
                    W_map_right = 0;
            }
        }
        l = 0;
        for (int k = 0; k < a.length(); k++) {
            if (Zamena(int(a[k])) >= 0) {
                l = l * 10 + Zamena(a[k]);
            }
            if (int(a[k]) == 44) {  //,
                map_right.push_back(l);
                l = 0;
            }
            if (int(a[k]) == 59) {  //;
                l = 0;
            }
        }
 
        H_map_left = 0;
        W_map_left = 1;
        n2 = n;
        n2--;
        if (n2 < 1) n2 = Colichestvo_kart;
        a = head->FirstChildElement("Map" + to_string(n2))->GetText();
        for (int i = 0; i < a.length(); i++) {
            if (a[i] == ',')
                W_map_left++;
            if (a[i] == ';') {
                H_map_left++;
                if (i < a.length() - 1)
                    W_map_left = 0;
            }
        }
        l = 0;
        for (int k = 0; k < a.length(); k++) {
            if (Zamena(int(a[k])) >= 0) {
                l = l * 10 + Zamena(a[k]);
            }
            if (int(a[k]) == 44) {  //,
                map_left.push_back(l);
                l = 0;
            }
            if (int(a[k]) == 59) {  //;
                l = 0;
            }
        }
 
    }
 
    void Draw(RenderTarget& window) {
        for (int j = 0; j < H_map; j++) {
            for (int i = 0; i < W_map; i++) {
                if (map[i + j * W_map] == 0) { continue; }
                if (map[i + j * W_map] == 1) { DrawRectangle(window, (i * Block_Size) - (player.x) + (N2 - 1) * W_map * Block_Size, (j * Block_Size) - (player.y), Block_Size, Block_Size, 46, 72, 43); }
                if (map[i + j * W_map] == 2) { DrawRectangle(window, (i * Block_Size) - (player.x) + (N2 - 1) * W_map * Block_Size, (j * Block_Size) - (player.y), Block_Size, Block_Size, 66, 66, 66); }
            }
        }
        for (int j = 0; j < H_map_right; j++) {
            for (int i = 0; i < W_map_right; i++) {
                if (map_right[i + j * W_map_right] == 0) { continue; }
                if (map_right[i + j * W_map_right] == 1) { DrawRectangle(window, (i * Block_Size) - (player.x) + N2 * W_map_right * Block_Size, (j * Block_Size) - (player.y), Block_Size, Block_Size, 46, 72, 43); }
                if (map_right[i + j * W_map_right] == 2) { DrawRectangle(window, (i * Block_Size) - (player.x) + N2 * W_map_right * Block_Size, (j * Block_Size) - (player.y), Block_Size, Block_Size, 66, 66, 66); }
            }
        }
        for (int j = 0; j < H_map_left; j++) {
            for (int i = 0; i < W_map_left; i++) {
                if (map_left[i + j * W_map_left] == 0) { continue; }
                if (map_left[i + j * W_map_left] == 1) { DrawRectangle(window, (i * Block_Size) - (player.x) + (N2 - 2) * W_map_left * Block_Size, (j * Block_Size) - (player.y), Block_Size, Block_Size, 46, 72, 43); }
                if (map_left[i + j * W_map_left] == 2) { DrawRectangle(window, (i * Block_Size) - (player.x) + (N2 - 2) * W_map_left * Block_Size, (j * Block_Size) - (player.y), Block_Size, Block_Size, 66, 66, 66); }
            }
        }
    }
 
    void go(RenderTarget& window) {
        if (start == 0) {
            if (N > Colichestvo_kart) N = 1;
            if (N < 1) N = Colichestvo_kart;
            Read_XML(N);
            start = 1;
        }        
        Draw(window);
        if (player.x + W / 2 > N2 * W_map * Block_Size) { start = 0; N++; N2++; }
        if (player.x - W / 2 < (N2 - 2) * W_map * Block_Size) { start = 0; N--; N2--; }
    }
};
Map map;
 
int main()
{
    RenderWindow window(VideoMode(W, H), "Play");       
 
    while (window.isOpen())
    {
        Event event;
        while (window.pollEvent(event))
        {
            if (event.type == Event::Closed)
                window.close();
        }
 
        window.clear(Color::White);
 
        map.go(window); // тут ошибка "map не являеться однозначным"
        player.go();            
   
        DrawRectangle(window, map.H_map / 2 * Block_Size, H / 2, Block_Size * 2, Block_Size, 0, 0, 0);  // и тут ошибка
        DrawRectangle(window, map.H_map / 2 * Block_Size, H / 2 + Block_Size / 3, Block_Size / 5, Block_Size, 255, 25, 44); // и тут ошибка
 
        window.display();
    }
    return 0;
}

Избавляемся от ошибки «This function or variable may be unsafe» в Visual Studio

Время чтения: 5 минут

Компилятор в Visual Studio сильно отличается от привычных большинству программистов GCC или CLANG, из-за чего при написании кода на C или C++ очень часто возникают неожиданные проблемы в виде ошибки использования стандартных функций, например, scanf, fopen, sscanf и тому подобным. Студия предлагает заменять функции на безопасные (повезёт, если нужно просто добавить _s к функции с ошибкой, но нередко в этих функциях идёт иной набор аргументов, нежели в обычной программе). Если вы не готовы с этим мириться, то этот пост для вас!

Давайте для начала создадим обычный консольный проект в Visual Studio и напишем простенькую программу, которая запрашивает ввод двух чисел, вводит их и затем выводит на экран.

Попробовав выполнить сборку проекта, обнаружим те самые ошибки.

Чтобы Visual Studio не тратила ваши нервы, сделаем следующее:

1. Выберем пункт «Проект» в верхнем меню

2. В открывшемся списке щёлкнем по «Свойства название_проекта»

3. В появившемся окне выберем Свойства конфигурации , C/C++ , Препроцессор

4. В строке Определения препроцессора допишем в самый конец строку ;_CRT_SECURE_NO_WARNINGS

6. Попробуем заново выполнить сборку проекта:

Ошибки исчезли, сборка прошла успешно и программа прекрасно работает! Теперь можно писать код как обычно, не переживая о необычном поведении Visual Studio!

Программист, сооснователь programforyou.ru, в постоянном поиске новых задач и алгоритмов

Языки программирования: C, C++, Pascal, C#

Студент МГУ им. М.В. Ломоносова

А Вы знаете, что мы пишем программы на C, C++, C#, Pascal и Python?

Так что если Вам нужно написать программу на C/C++, C#, Pascal или Python — мы с радостью поможем с этим!

В том числе мы занимаемся репетиторством по информатике и программированию, а также готовим к ОГЭ и ЕГЭ!

Почему именно мы?

  • Более 1800 выполненных заказов;
  • Более 170 отзывов;
  • Качественное решение
  • Короткие сроки и привлекательные цены
  • Различные акции и скидки

Как с нами связаться?

  • группа Вконтакте: vk.com/programforyou
  • наша почта: order@programforyou.ru

Programforyou — позвольте нам писать код для вас и вы получите качественное решение в короткие сроки по привлекательной цене!

Ошибка C2653: . не является существующим классом

Я продолжаю получать ту же ошибку, когда я определенно создал «non-existent» класс RandomNumGuesser .

Я уже позаботился о том, чтобы включить ; после закрытия каждого класса >

Не знаю, что еще сказать.

Я мог бы использовать опытный глаз, потому что я не вижу никаких проблем.

Кроме того, в данный момент я использую Visual 2013. Были включены предварительно скомпилированные заголовки.

2 Ответа

У вас есть синтаксическая ошибка. Есть и другие проблемы: getCurrentGuess не является частью класса RandomNumGuesser (то же самое с другими методами в классе Guesser ). Я считаю, что журнал ошибок был сокращен в вопросе.

Вот как должен выглядеть cpp

RandomNumGuess не имеет функций-членов

Однако вы определяете их в исходном файле.

Может быть, они должны быть абстрактными виртуальными функциями?

Вы также не можете определить конструктор по умолчанию для NumberGuesser и RandomNumGuesser .

Похожие вопросы:

Это серьезно действует мне на нервы. Этот код работал просто отлично раньше, я перезапустил IDE (Visual Studio 2010), и теперь внезапно код выходит из строя на меня. Журнал ошибок огромен, и я.

Я пытаюсь сослаться на структуру из другого класса в своем коде, и это дает мне ошибку, говоря, что у меня есть проблема синтаксиса. #pragma once #include Definitions.h #include GV.h #include UI.h.

Общий вопрос об интеграции Realm с существующим проектом. Другой фреймворк у меня есть класс User , который имеет кучу свойств. Есть ли в любом случае с Realm, что я могу просто сохранить этот.

Когда я запускаю эту программу, она говорит, что в этом файле есть ошибка под названием error C2653: ‘Application’ : is not a class or namespace name #include MyForm.h using namespace std; int.

Я понимаю, что многие люди задавали этот вопрос, и есть похожие на Stack Overflow, но я не могу их понять. Я надеюсь, что кто-то скажет мне, почему это происходит, но и что происходит. Я кодировал.

Я загружаю jsoncpp на Github. И построил и установил его с мезоном и ниндзя. Но когда я включаю в свою программу, я получил ошибку: ‘PrecisionType’ не является классом или.

Добрый день. Я начал изучать c++ , и у меня есть и проблема компиляции моего проекта. Если вы найдете какой-нибудь неисправный код, я буду рад, если вы мне скажете. У меня есть следующие.

Мои предыдущие вопросы касались одного и того же проекта: Один и два . Нет необходимости читать их; просто знайте, что я пытаюсь использовать родной C++ SDK в проекте Visual C++. Это гораздо.

В Laravel4 я хочу использовать модель, которая представляет собой Event , поступающую из моей базы данных. Таким образом, в app/models у меня есть моя модель Event , которая расширяет Eloquent.

Я работаю над некоторым программным обеспечением для моделирования, написанным на C++. В настоящее время, когда я пытаюсь построить свой код, я получаю 9 ошибок компиляции, все жалуются на три.

C++ для людей

std::cout

Часто встречающиеся ошибки стадии компиляции

Очень часто начинающие программисты впадают в суеверный ужас, когда видят, что компилятор нашел в тексте программы ошибку, но не понимают, в чем она заключается.

А если помножить этот факт на незнание английского языка («чего там ему не нравится. ») и слабое владение синтаксисом C++ («хм, а может, тут нужна точка с запятой…»), то проблема принимает масштаб катастрофы.

Тот факт, что компилятор в силу своих ограниченных возможностей изо всех сил старается объяснить, что конкретно неверно, не спасает ситуацию. Как быть, если гуглить неохота, а спросить не у кого?

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

В качестве компилятора возьмем g++, который, в частности, может использоваться в среде Code::Blocks. Версия gcc (куда входит g++) для ОС Windows зовется MinGW. По ходу я буду давать аналоги ошибок из лексикона русскоязычной Microsoft Visual C++.

Итак, частые ошибки:

undeclared identifier

doy.cpp: In function ‘int main()’:
doy.cpp:25: ‘DayOfYear’ undeclared (first use this function)
doy.cpp:25: (Each undeclared identifier is reported only once for each function it appears in.)
doy.cpp:25: parse error before ‘;’ token

2) Смысл
Использован идентификатор DayOfYear , но компилятор не нашел его объявления. Он не знает, что такое DayOfYear .

  • Вы забыли включить какой-то заголовочный файл ( #include. )
  • Вы где-то ошиблись в написании идентификатора (при объявлении или использовании)
  • Вы вообще забыли, что эту переменную надо объявить

Попытавшись скомпилировать это в Microsoft Visual C++, вы увидите:

error C2065: DayOfYear: необъявленный идентификатор

cout undeclared

xyz.cpp: In function ‘int main()’:
xyz.cpp:6: ‘cout’ undeclared (first use this function)
xyz.cpp:6: (Each undeclared identifier is reported only once for each function it appears in.)

2) Смысл
Суперклассика. Без комментариев.

  • Вы забыли включить
  • Вы забыли написать using namespace std;

jump to case label

switch.cpp: In function ‘int main()’:
switch.cpp:14: jump to case label
switch.cpp:11: crosses initialization of ‘int y’

2) Смысл
Смысл туманен

3) Когда бывает
Вы попытались объявить и инициализировать переменную (объект, указатель и т.п.) в метке case оператора выбора switch. Правилами C++ это запрещено.

В Microsoft Visual C++ эта ошибка зовется

error C2360: пропуск инициализации ‘y’ из-за метки ‘case’

Выход: заключите операторы этого case’а в фигурные скобки <>.

multi-line string / unterminated string

using namespace std;

вызовет бурную реакцию компилятора:

string.cpp:7:12: warning: multi-line string literals are deprecated
string.cpp: In function ‘int main()’:
string.cpp:7: ‘so’ undeclared (first use this function)
string.cpp:7: (Each undeclared identifier is reported only once for each function it appears in.)
string.cpp:7: parse error before ‘Mary’
string.cpp:8:28: warning: multi-line string literals are deprecated
string.cpp:8:28: missing terminating » character
string.cpp:7:12: possible start of unterminated string literal

2) Смысл
Компилятор думает, что мы хотим создать строковую константу с содержащимся в ней переносом строки, что-то типа

что не поддерживается языком. Также делается предположение о том, что мы, возможно, забыли поставить кавычки в конце первой строки. Собственно, так оно и есть.

3) Когда бывает
Когда не соблюдается правильное количество и положение кавычек в строковых литералах. Надо быть внимательнее.

Microsoft Visual C++ со свойственной ему детской непосредственностью, отметит, что нельзя делать переносы в строках и возмутится, где точка с запятой:

error C2001: newline в константе
error C2146: синтаксическая ошибка: отсутствие «;» перед идентификатором «cout»

comparison between signed and unsigned integer expressions

xyz.cpp: In function ‘int main()’:
xyz.cpp:54: warning: comparison between signed and unsigned integer expressions

2) Смысл
Это — предупреждение компилятора, которое говорит о том, что мы пытаемся сравнить (==, и т.д.) целочисленное выражение (может принимать положительные, отрицательные значения и 0) и беззнаковое целочисленное выражение (может быть только положительным, либо 0).

3) Когда бывает
Собственно, тогда и бывает. Напомню, что тип int по умолчанию знаковый, а некоторые функции (например, vector::size() ) возвращают unsigned int .
К примеру, следующий на первый взгляд безобидный код вызовет описываемое предупреждение:

Следует помнить, что в памяти знаковые и беззнаковые типы имеют разные внутренние представления, поэтому надо быть чертовски осторожными с указателями.

В Microsoft Visual C++ предупреждение выглядит так:

suggest parentheses around assignment used as truth value

xyz.cpp: In function `int main()’:
xyz.cpp:54: warning: suggest parentheses around assignment used as truth value

2) Смысл
Тоже классика. Компилятор предполагает (и в 99% случаев прав), что вы по ошибке включили в скобки в качестве условия для if/while/for вместо условного выражения выражение присваивания.

3) Когда бывает
Чаще всего — в if ‘ах, когда вместо «==» используется «=»

if (length = maxLength)

if (length == maxLength)

Заминка в том, что это не ошибка, т.к. в скомпилированной программе (если мы проигнорируем предупреждение) выражение присваивания (которое возвращает значение правого аргумента) во всех случаях, кроме тех, когда оно вернет 0 , будет преобразовано к true .

Вопрос по плюсам (error C2102: ‘&’ requires l-value)

Привет.
Такой вопрос:

значит тут будет ошибка.. error C2102: ‘&’ requires l-value
Нашёл тут вроде как объяснение.. И там говорят про локальную переменную.. Что типа я реально возвращаю временный объект типа int*. Это так ? То есть в стеке создаётся переменная и туда помещается значение int*, так ? Если так, то почему я не могу взять её адрес ?? Она же есть !

  • =A=L=X=
  • Постоялец

Gladiator
> Что типа я реально возвращаю временный объект типа int*. Это так ? То есть в
> стеке создаётся переменная и туда помещается значение int*, так ?

> Если так, то
> почему я не могу взять её адрес ?? Она же есть !

Ну вообще то можешь, но уже в следующем операторе команды функции оно не будет иметь смысла и корректного адреса, так что правильно ругается.

  • Genx
  • Удалён

>То есть в стеке создаётся переменная и туда помещается значение int*, так ?
Не в стеке. По умолчанию результат функции помещается не на стек, а в регистр EAX процессора (если он влезает туда).

  • laMer007
  • Удалён

Gladiator
Вы делаете что-то странное и за последствия я не ручаюсь, но думаю во время учебы нужно заниматься странными вещами.
Чтобы скомпилировалось достаточно что-то вроде:

  • Zefick
  • Постоялец

upd: специальное дополнение: приведённые два варианта неравносзачны, неоднозначны и не-ещё-что-хотите, если вы считаете их по какой-то причине некорректными для непоставленной задач, если они оскорбляют ваши религиозные чувства, доставляют вам батхёрт потому что их написал явист или ещё каким-то образом нарушают ваш внутренний мир, то просьба в треде об этом больше не писать 🙂

  • nes
  • Постоялец

Zefick
Приведенные тобой варианты не однозначны, первый не корректный для данной задачи.

  • Gladiator
  • Постоялец

=A=L=X=
> Ну вообще то можешь, но уже в следующем операторе команды функции оно не будет
> иметь смысла и корректного адреса, так что правильно ругается.
Почему не будет ? Стековая переменная держится в памяти пока жива переменная.. А жива она до тех пор, пока не покинула блок в котором объявлена.

  • Gladiator
  • Постоялец

Не решаю конкретной задачи, чисто академический интерес

  • Gladiator
  • Постоялец

аа.. всё дошло.. типа я беру адрес временной переменной, которая уничтожается после операции присваивания..

  • PANDA
  • Постоялец

Zefick
> int **pMember1 = &p;
> int **pMember2 = a.GetMember2();
Ты хочешь сказать, что это одно и то же? Может, ты лучше будешь давать советы по жабе?

  • susageP
  • Постоялец

возможно прокатит как int*const & pMember = a.GetMember();
const продлевает жизнь временным объектам. возможно прокатит и с int.

Gladiator
> И там говорят про локальную переменную.. Что типа я реально возвращаю временный
> объект типа int*. Это так ? То есть в стеке создаётся переменная и туда
> помещается значение int*, так ? Если так, то почему я не могу взять её адрес ??
> Она же есть !

это временная переменная ‘выражения’ она живет до’;’ также как и временные объекты.
ссылочная константа если не ошибаюсь это единственный способ продлить жизнь временного объекта.

  • Zefick
  • Постоялец

PANDA
> Ты хочешь сказать, что это одно и то же?
Нет, это ты так решил.

> Может, ты лучше будешь давать советы по жабе?
А может ты не будешь писать посты с наездами, если не умеешь читать мысли?

  • PANDA
  • Постоялец

Zefick
Из твоего кода создается именно такое впечатление.
1 «вариант»
> int *p = a.GetMember1();
> int **pMember1 = &p;
2 «вариант»
> int **pMember2 = a.GetMember2();
Зачем давать советы, если сам не понимаешь указатели?

  • Eugene
  • Участник

PANDA
Все нормально. Два варианта для двух разных целей.
Если я захочу сделать что то вроде foo(int** out_ptr), то я, может быть, захочу изменить поле класса,
foo(pMember2);
bor(*pMember2);
а может и не захочу
if(!*pMember1) foo(pMember1);
bar(*pMember1);

Reference to ‘ ‘ is ambigous error in Xcode

I was working with a custom iOS framework project in Xcode.There I am getting a lot of errors mentioning «Reference to ‘ ‘ is ambigous».I am attaching the screenshot of errors.Please help me correcting this.

Создан 03 июл. 15 2015-07-03 05:53:29 haritha

It looks like you forgot to mention any «;» or «,» in the code line. or i can’t debug that’s why it looks like problem with if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) line. – Code Hunterr 06 июл. 15 2015-07-06 04:31:41

Click on the disclosure next to the error (in the Error navigator on the left). Make the navigator wide enough to show the full messages after you do. Post a screenshot of those messages. – rob mayoff 06 июл. 15 2015-07-06 04:52:40

try ‘Cmd+Shift+K’ – 0yeoj 06 июл. 15 2015-07-06 04:54:30

@robmayoff:Yes please check the screen shot – haritha 06 июл. 15 2015-07-06 05:09:26

Actually when I build this in latest iOS 8 sdks I am not getting any error.It is showing problems in sdks 6.1 and other lower versions.But I want to run this in sdks 6.1 itself – haritha 06 июл. 15 2015-07-06 05:12:53

5 ответов

Actually This error was cleared when I shift from iOS SDK 6.1 to 7.1(or any version higher that 6.1)

Создан 10 июл. 15 2015-07-10 05:00:35 haritha

i am having same ios SDK. and i import UIKit and CoreGraphicsframework the error is shown CGRectMinXEdge is ambiguous in MMDrawer class. what can i do? – ios developer 20 июл. 16 2016-07-20 13:09:09

The error message makes me think you have two declarations of the same library functions. All of those references are from UIKit . Check to make sure only one version of UIKit is referenced in your project (check the frameworks), and make sure any libraries you have included are linking the same UIKit version as the rest of the app.

Steps to fix from here:

  • Clean the project
  • Delete everything inside ‘

/Library/Developer/Xcode/DerivedData/ModuleCache/’ (the button inside the organizer window did not work for me)

  • Clean once more
  • Build project
  • Создан 06 июл. 15 2015-07-06 04:42:35 Jason

    Adding more information to Jason’s answer.

    The error message makes me think you have two declarations of the same library functions. All of those references are from UIKit

    mostly this can be occurring because of the header files. As you can see all the errors indicates that it is quoting the enum values. Enum values will always be in the .h files. Normally the reference headers(.h files) will be present inside the frameworks. It is a common mistake that sometimes these header files will be buried some where in our code by any third party frameworks. So kindly check your third party libraries.

    I did face this issue once and after searching everywhere i could not able to find the solution. The only thing solved my issue was

    Opening a fresh project and importing my files into that project. Actually it really took me less than 10 minutes to move to a new project and immediately my xcode was happy. This is definitely worth a try.

    Создан 06 июл. 15 2015-07-06 05:40:55 iPrabu

    Why is this bug and your solution related to namespaces? – Amin Negm-Awad 08 июл. 15 2015-07-08 05:33:38

    Clean your project and rebuild again.If it don’t work then create a new project

    Создан 07 июл. 15 2015-07-07 04:05:14 haritha

    Set value of Enable Module (C and objective-c) to No

    Создан 20 янв. 17 2017-01-20 13:53:34 Mohit tomar

    This doesn’t solve the problem. – Aanchal Chaurasia 27 окт. 17 2017-10-27 11:55:51

    Я пытаюсь проверить, существует ли подключение к Интернету, используя функцию InternetCheckConnection для wininet.

    Вот мой CheckerClass: , который обрабатывает процесс проверки.

    #pragma once
    #include <Windows.h>
    #include <wininet.h>
    #pragma comment(lib,"wininet.lib")
    #include <String>
    public ref class CheckerClass
    {
    public:
    static std::string hasInternet() {
    bool bConnect = InternetCheckConnection(L"https://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0);
    if (bConnect){
    return "Has Internet!";
    }else{
    return "No Internet!";
    }
    }
    };
    

    Но я получаю следующую ошибку и не могу ее решить.

    Error (active)  E1986   an ordinary pointer to a C++/CLI ref class or interface class is not allowed
    Error (active)  E0266   "IServiceProvider" is ambiguous
    Error   C3699   '*': cannot use this indirection on type 'IServiceProvider' 
    

    После поиска я обнаружил, что это может из-за использования using namespace System, но у меня этого нет в указанном выше классе.

    Однако у меня есть следующее из класса Main , где я использую вышеуказанный класс.

    #pragma once
    #include<string>
    #include "CheckerClass.h"
    namespace CppCLRWinformsProjekt {
    using namespace System;
    using namespace System::ComponentModel;
    using namespace System::Collections;
    using namespace System::Windows::Forms;
    using namespace System::Data;
    using namespace System::Drawing;
    using std::string;
    public ref class Form1 : public System::Windows::Forms::Form
    {
    public:
    CheckerClass checkerClass;
    Form1(void)
    {
    InitializeComponent();
    string result = checkerClass.hasInternet();
    this->label_output->Text = gcnew System::String(result.c_str());
    }
    .....
    

    Может ли кто-нибудь объяснить, что происходит, и как я могу решить вышеуказанную проблему?

    2 ответа

    Лучший ответ

    Какие у вас есть CheckerClass? Классы обычно делятся на два файла. Это означает, что у вас должны быть CheckerClass.h и CheckerClass.cpp. Где этот код из этих двух файлов?

    В любом случае, вот пример базы рабочего класса на вашем коде.

    В вашем файле CheckerClass.h вы должны иметь;

    #include <string>
    #ifndef CHECKER_CLASS_H
    #define CHECKER_CLASS_H
    using std::string;
    class CheckerClass {
    private:
    //declare private variables here, if you need one.
    public:
    CheckerClass(); 
    string hasInternet(); //The function
    };
    #endif
    

    Затем реализация класса переходит в файл CheckerClass.cpp;

    #include "CheckerClass.h"
    #include "string"
    #include "windows.h"
    #include "wininet.h"
    #pragma comment(lib,"wininet.lib")
    CheckerClass::CheckerClass() {
    //initialize variable here if needed.
    }
    std::string CheckerClass::hasInternet() {
    bool bConnect = InternetCheckConnection(L"https://www.google.com", FLAG_ICC_FORCE_CONNECTION, 0);
    if (bConnect) {
    return "has Internet";
    }
    else {
    return "no internet";
    }
    }
    

    Теперь вы можете получить результат с помощью своего кода;

    string result = checkerClass.hasInternet();
    this->label_output->Text = gcnew System::String(result.c_str());
    

    Это позволит избежать конфликтов и ошибок, с которыми вы столкнулись.


    1

    Polar
    25 Дек 2020 в 05:00

    Это потому, что using namespace System; конфликтует с именем в Windows.h,

    Windows.h представил servprov.h косвенно. И servprov.h имеет следующее определение: typedef interface IServiceProvider IServiceProvider; Среди них IServiceProvider конфликтует с IServiceProvider в пространстве имен System, вызывая неопределенность.

    Решение состоит в том, чтобы использовать полное имя вместо пространства имен System, например System::IServiceProvider.


    1

    Barrnet Chou
    24 Дек 2020 в 03:05

    Одно из первых вещей, с которыми сталкивается каждый начинающий программист — это ввод и вывод данных в программе. Для этого часто используются стандартные потоки ввода и вывода — `cin` и `cout`, а также функция `system`. Однако, несмотря на их широкую популярность, они не являются однозначными и могут приводить к ошибкам. В этой статье мы рассмотрим, как избежать этих ошибок.

    1. Ошибка №1: Использование потока ввода без проверки на ошибки.
    В большинстве случаев, когда мы используем оператор извлечения `>>` для чтения данных из стандартного ввода (`cin`), мы не проверяем, прошла ли операция успешно. Это может привести к пропуску ввода или считыванию некорректных данных.

    Пример неправильного использования:

    int x;
    cin >> x;
    

    Чтобы избежать этой ошибки, следует всегда проверять состояние потока ввода после каждой операции ввода. Например, можно проверить, достигнут ли конец файла:

    int x;
    if (!(cin >> x)) {
    cout << "Ошибка ввода!" << endl;
    }
    

    2. Ошибка №2: Игнорирование некорректного ввода.
    Часто в программе ошибочные данные вводятся пользователем. Игнорирование таких ситуаций может привести к непредсказуемым результатам или даже к аварийному завершению программы. Поэтому необходимо всегда проверять корректность введенных данных и сообщать об ошибке, если таковая возникла.

    Пример:

    int x;
    if (!(cin >> x)) {
    cout << "Ошибка ввода!" << endl;
        cin.clear(); // сбросить флаги ошибок
        cin.ignore(numeric_limits<streamsize>::max(), '\n'); // пропустить оставшиеся символы до символа новой строки
    }
    

    3. Ошибка №3: Использование функции `system` без необходимости.
    Функция `system` позволяет выполнить команду в командной строке операционной системы. Однако, использование этой функции может быть опасным, так как она позволяет выполнять произвольный код на компьютере пользователя и может привести к уязвимостям безопасности.

    Кроме того, использование функции `system` может сильно замедлить выполнение программы и создать проблемы с переносимостью кода между различными операционными системами.

    Поэтому, если нет реальной необходимости вызывать команду в командной строке, следует избегать использования функции `system` и искать альтернативные способы решения задачи.

    4. Ошибка №4: Некорректное использование потоков вывода.
    Одна из распространенных ошибок — некорректное использование потока вывода `cout`. Например, если мы хотим вывести десятичное число с точностью двух знаков после запятой, мы можем использовать манипулятор `setprecision`:

    double x = 3.14159265;
    cout << setprecision(2) << x << endl;
    

    Однако, этот код не будет работать, так как манипуляторы влияют на все последующие выводимые данные. В данном случае, значение `setprecision(2)` будет применяться не только к числу `x`, но и ко всем последующим выводимым данным. Чтобы избежать этой ошибки, можно использовать манипулятор `fixed`:

    double x = 3.14159265;
    cout << fixed << setprecision(2) << x << endl;
    

    Таким образом, мы убеждаемся, что наша точность применяется только к переменной `x`.

    В заключение, необходимо отметить, что `cin`, `cout` и `system` — неоднозначные средства ввода-вывода в программировании. Они могут приводить к ошибкам и проблемам безопасности, поэтому необходимо использовать их с осторожностью и всегда проверять корректность введенных данных. Рекомендуется использовать альтернативные, более безопасные и эффективные способы работы с вводом-выводом в программе.

    Программа по вычислениям полностью устраивает, она перемножает 2 матрицы указанного размера с рандомными числами, она запускается и правильно считает, но показывает, что есть ошибки типа: cin, cout, system не являются однозначными, всего 17 ошибок, подчеркивает красным эти операторы, как это убрать?

    #include <iostream>
    #include <ctime>
    #include <iomanip>
    using namespace std;
    int main()
    {
    setlocale(LC_ALL, "Russian");
    int** P1, ** P2, ** P3, n, m;
    cout << "Введите кол-во строк матрицы: ";
    cin >> n;
    cout << "Введите кол-во столбцов матрицы: ";
    cin >> m;
    P1 = new int* [n];
    for (int i = 0; i < n; i++)
        P1[i] = new int[m];
    srand(time(0));
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)  //рандом 1 матрицы
            P1[i][j] = rand() % 10;
    for (int i = 0; i < n; i++)
    {
        cout << endl;                  //вывод 1 матрицы
        for (int j = 0; j < m; j++)
        {
            cout << setw(3) << P1[i][j] << "t";
        }
    }
    cout << endl;
    int k;
    cout << "Введите кол-во столбцов 2 матрицы: ";
    cin >> k;
    P2 = new int* [k];
    for (int i = 0; i < m; i++)
        P2[i] = new int[k];
    for (int i = 0; i < m; i++)
        for (int j = 0; j < k; j++)  //рандом 2 матрицы
            P2[i][j] = rand() % 10;
    for (int i = 0; i < m; i++)
    {
        cout << endl;                  //вывод 2 матрицы
        for (int j = 0; j < k; j++)
        {
            cout << setw(3) << P2[i][j] << "t";
        }
    }
    cout << endl;
    P3 = new int* [n];
    for (int i = 0; i < n; i++)
        P3[i] = new int[k];
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < k; j++)  //умножение матриц
        {
            P3[i][j] = 0;
            for (int z = 0; z < m; z++)
                P3[i][j] = P3[i][j] + P1[i][z] * P2[z][j];
        }
    }
    cout << endl << "Результат умножения:" << endl;
    for (int i = 0; i < n; i++)                     //вывод результата 
     умножения
    {
        cout << endl;
        for (int j = 0; j < k; j++)
            cout << setw(3) << P3[i][j] << "t";
    }
    cout << endl;
    for (int i = 0; i < n; i++)
        delete[] P1[i];
    delete[] P1;
    for (int i = 0; i < m; i++)
        delete[] P2[i];
    delete[] P2;
    for (int i = 0; i < n; i++)
        delete[] P3 [i];
    delete[] P3;
    system("pause");
    return 0;
    }
    

    0 / 0 / 0

    Регистрация: 07.01.2023

    Сообщений: 6

    1

    23.03.2023, 13:30. Показов 1727. Ответов 14


    Студворк — интернет-сервис помощи студентам

    Написала код, всё работает прекрасно, но через какое-то время появляется 90+ ошибок «cout не является однозначным» и код не компилируется (using namespace std есть, да и код работал), раньше эту проблему удавалось решить переписав строку «using namespace std» или просто убрав «;» и вернув её обратно, но сейчас это уже не помогает. Поискала решение, некоторые перезапускают VS, это помогло, но ошибка появляется очень часто и постоянно перезапускать программу неудобно. Подскажите, может есть ещё какие-то способы это решить.

    0

    Лежебока

    296 / 215 / 92

    Регистрация: 12.05.2021

    Сообщений: 1,263

    23.03.2023, 13:31

    2

    moolingtoon, предоставьте пример и проблемы, а там будет видно,наверно

    0

    Нарушитель

    8603 / 4607 / 1063

    Регистрация: 12.03.2015

    Сообщений: 21,672

    23.03.2023, 13:33

    3

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    Подскажите, может есть ещё какие-то способы это решить.

    Что за программного монстра ты рожаешь? Для этого использование MSVC необходимо?

    0

    moolingtoon

    0 / 0 / 0

    Регистрация: 07.01.2023

    Сообщений: 6

    23.03.2023, 13:56

     [ТС]

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    #include <iostream>
    #include <Windows.h>
    #include <string>
    #include <fstream> 
    #include <stdlib.h>
    #include <conio.h>
    using namespace std;
     
    HANDLE color;
    void white ();
    void red();
    void green();
     
    void white()
    {SetConsoleTextAttribute(color, 7);}
    void red()
    {SetConsoleTextAttribute(color, 12);}
    void green()
    {SetConsoleTextAttribute(color, 10);}
     
    void MainMenu();
     
    void MainMenu()
    {
        system("cls");
        green(); cout << "tГлавное меню" << endl;
        cout << "[1] ";
        white(); cout << "Войти в личный кабинет" << endl;
        green(); cout << "[2] ";
        white(); cout << "Регистрация" << endl;
        green(); cout << "[3] ";
        white(); cout << "Войти от имени администратора" << endl;
        red(); cout << "[Esc] ";
        white(); cout<<"Выход" << endl << endl;
    }
    int main()
    {
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        color = GetStdHandle(STD_OUTPUT_HANDLE);
        MainMenu();
    }

    вот небольшой кусочек, ошибка выделяет все строчки там где есть cout

    0

    Нарушитель

    8603 / 4607 / 1063

    Регистрация: 12.03.2015

    Сообщений: 21,672

    23.03.2023, 14:04

    5

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    вот небольшой кусочек, ошибка выделяет все строчки там где есть cout

    Проблема явно в самой IDE и/или в мокрософтовском компиляторе.
    У меня компилится прям в консоли и работает.

    cout не является однозначным

    0

    0 / 0 / 0

    Регистрация: 07.01.2023

    Сообщений: 6

    23.03.2023, 14:06

     [ТС]

    6

    у меня тоже работает, до определенного момента, через какое-то время появляется ошибка, раньше чинить её получалось а вот сейчас никак

    0

    Нарушитель

    8603 / 4607 / 1063

    Регистрация: 12.03.2015

    Сообщений: 21,672

    23.03.2023, 14:08

    7

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    у меня тоже работает, до определенного момента, через какое-то время появляется ошибка, раньше чинить её получалось а вот сейчас никак

    Я просил:

    Цитата
    Сообщение от Verevkin
    Посмотреть сообщение

    Для этого использование MSVC необходимо?

    0

    0 / 0 / 0

    Регистрация: 07.01.2023

    Сообщений: 6

    23.03.2023, 14:12

     [ТС]

    8

    курсовая по с++, начала работу естественно в VS, не думаю что переходить на новую среду будет удобно

    0

    Нарушитель

    8603 / 4607 / 1063

    Регистрация: 12.03.2015

    Сообщений: 21,672

    23.03.2023, 14:14

    9

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    курсовая по с++, начала работу естественно в VS

    Почему естественно?

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    не думаю что переходить на новую среду будет удобно

    Почему?

    0

    Нарушитель

    8603 / 4607 / 1063

    Регистрация: 12.03.2015

    Сообщений: 21,672

    23.03.2023, 14:19

    10

    MSVC — это не для курсовых и лаб, а для чего-то грандиозного, с окошками, например. Для мелких консольных проектов можно юзать и что-то попроще.

    cout не является однозначным

    0

    0 / 0 / 0

    Регистрация: 07.01.2023

    Сообщений: 6

    23.03.2023, 14:26

     [ТС]

    11

    изначально изучение языка начали в VS и постоянно работали в нём

    0

    Нарушитель

    8603 / 4607 / 1063

    Регистрация: 12.03.2015

    Сообщений: 21,672

    23.03.2023, 14:32

    12

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    изначально изучение языка начали в VS и постоянно работали в нём

    А, ну это другое дело!
    Тогда страдай.
    ——
    Я-то, честно говоря, думал, что цель —

    сдать курсач

    научиться кодить, а тут вон оно чо, Михалыч!

    0

    фрилансер

    4810 / 4405 / 939

    Регистрация: 11.10.2019

    Сообщений: 11,637

    23.03.2023, 14:40

    13

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    using namespace std есть

    вот и плохо. Убирай его и везде к его идентификаторам приписывай std::. Почти уверен, что проблема в этом

    Добавлено через 1 минуту
    что-то мне ещё подсказывает, что это вообще не компилятор ругается, а intellisence подчёркивает. В последнем случае можно просто не обращать внимания

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

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    но через какое-то время появляется 90+ ошибок

    точно

    0

    Лежебока

    296 / 215 / 92

    Регистрация: 12.05.2021

    Сообщений: 1,263

    23.03.2023, 15:00

    14

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    курсовая по с++, начала работу естественно в VS, не думаю что переходить на новую среду будет удобно

    Если там нет ничего супер-пупер навороченного, то попробуй другую среду(dev-c++, codeblocks),на крайняк можно онлайн компилятор
    Dev и Codebloks довольно удобны, быстро освоишься

    0

    Вездепух

    Эксперт CЭксперт С++

    10962 / 5948 / 1627

    Регистрация: 18.10.2014

    Сообщений: 14,924

    23.03.2023, 17:32

    15

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    у меня тоже работает, до определенного момента, через какое-то время появляется ошибка, раньше чинить её получалось а вот сейчас никак

    Так не бывает и вы что-то выдумываете.

    Разумеется, если ошибка есть, то никакие «переходы на другую IDE» тут не помогут.

    Цитата
    Сообщение от moolingtoon
    Посмотреть сообщение

    ошибка выделяет все строчки там где есть cout

    «Выделяет»? Что значит «выделяет»?

    0

    IT_Exp

    Эксперт

    87844 / 49110 / 22898

    Регистрация: 17.06.2006

    Сообщений: 92,604

    23.03.2023, 17:32

    Помогаю со студенческими работами здесь

    Ошибка компиляции: «ref» не является однозначным
    Двадцать ошибок и все как одна — &quot;ref&quot; не является однозначным. Помогите, мне эту красоту ещё…

    «count» не является однозначным, проблема в коде
    Всем привет, возникла проблема при написании кода , помогите пожалуйста решить , спасибо.
    #include…

    Ошибка компиляции «Е0266, х не является однозначным»
    Здравствуйте!

    Есть класс Tank, являющийся наследником Rectangle, который, в свою очередь,…

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

    Найти причины ошибки: cout не является членом std
    Пример из учебника, пишет что cin, cout — необъявленные идентификаторы, пыталась кажый прописать…

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

    Или воспользуйтесь поиском по форуму:

    15

    А так же выдает ошибку ‘эта переменная не содержит класс хранения или спецификатор типа’
    В чем проблема?(
    Подскажите пожаалулйстааа))))

    #include
    #include
    using namespace std;

    class country
    {

    public:

    country();
    country(char* aname , double at_winter, double at_spring,double at_summer,double at_autumn);
    country(const country& CONTRY);
    ~country();

    char* Returnname() { return name; };
    double ReturnT_Winter() { return t_winter; };
    double ReturnT_Spring() { return t_spring; };
    double ReturnT_Summer() { return t_summer; };
    double ReturnT_Autumn() { return t_autumn; };

    friend ostream& operator<<(ostream& OUT, const country& COUNTRY);
    friend istream& operator>>(istream& IN, country& COUNTRY);

    country& operator=(const country& COUNTRY);

    protected:

    char* name;
    double t_winter, t_spring, t_summer, t_autumn;

    };

    class NewCountry : public country {
    public:

    NewCountry();
    NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie);
    NewCountry(const NewCountry& COUNTRY);
    ~NewCountry();

    unsigned short int gpolusharie() { return polusharie; };
    string sReturnpolusharie();

    friend ostream& operator<<(ostream& OUT, const NewCountry& COUNTRY);
    friend istream& operator>>(istream& IN, NewCountry& COUNTRY);

    NewCountry& operator=(const NewCountry& COUNTRY);

    private:
    unsigned short int polusharie;
    };

    country::country()
    {
    name = NULL;
    t_winter = NULL;
    t_spring = NULL;
    t_summer = NULL;
    t_autumn = NULL;
    };

    country::country(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn) :
    name(new char[strlen(aname) + 1])
    {
    strcpy_s(name, strlen(aname) + 1, aname);
    t_winter = at_winter;
    t_spring = at_spring;
    t_summer = at_summer;
    t_autumn = at_autumn;
    };

    country::country(const country& COUNTRY) :
    name(new char[strlen(COUNTRY.name) + 1])
    {
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    };

    country::~country()
    {
    delete[] name;
    };

    ostream& operator<<(ostream& Out, const country& COUNTRY)
    {
    Out << «nСТРАНА: » << COUNTRY.name << «nТЕМПЕРАТУРА ЗИМОЙ» << COUNTRY.t_winter << «nТЕМПЕРАТУРА ВЕСНОЙ» << COUNTRY.t_spring << «nТЕМПЕРАТУРА ЛЕТОМ» << COUNTRY.t_summer << «nТЕМПЕРАТУРА ОСЕНЬЮ » << COUNTRY.t_autumn;

    return Out;
    };

    istream& operator>>(istream& In, country& COUNTRY)
    {
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    };

    country& country::operator=(const country& COUNTRY) {
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    name = COUNTRY.name;
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    return *this;
    };

    NewCountry::NewCountry() :
    country()
    {
    polusharie = NULL;
    };

    NewCountry::NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie) :
    country(aname,at_winter, at_spring, at_summer, at_autumn)
    {
    polusharie = apolusharie;
    };

    NewCountry::NewCountry(const NewCountry& COUNTRY) :
    country(COUNTRY)
    {
    polusharie = COUNTRY.polusharie;
    };

    NewCountry::~NewCountry()
    {
    delete[]name;
    };

    string NewCountry::sReturnpolusharie() {
    if (polusharie == 1) return «северное»;
    if (polusharie == 2) return «южное»;
    if (polusharie == 3) return «по обе стороны экватора»;
    return «!!!ОШИБКА:данные отсутствуют!!!»;
    };

    ostream& operator<<(ostream& Out, const NewCountry& COUNTRY)
    {
    Out << «nСТРАНА: » << COUNTRY.name << «nТЕМПЕРАТУРА ЗИМОЙ» << COUNTRY.t_winter << «nТЕМПЕРАТУРА ВЕСНОЙ» << COUNTRY.t_spring << «nТЕМПЕРАТУРА ЛЕТОМ» << COUNTRY.t_summer << «nТЕМПЕРАТУРА ОСЕНЬЮ » << COUNTRY.t_autumn;
    Out << «nРАСПОЛОЖЕНИЕ ОТНОСИТЕЛЬНО ЭКВАТОРА: «;
    if (COUNTRY.polusharie == 1) Out << «СЕВЕРНОЕ»;
    if (COUNTRY.polusharie == 2) Out << «ЮЖНОЕ»;
    if (COUNTRY.polusharie == 3) Out << «ПО ОБЕ СТОРОНЫ ЭКВАТОРА»;
    return Out;
    };

    istream& operator>>(istream& In, NewCountry& COUNTRY)
    {
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn >> COUNTRY.polusharie;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    };

    NewCountry& NewCountry::operator=(const NewCountry& COUNTRY) {
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    polusharie = COUNTRY.polusharie;
    return *this;
    };

    void main() {
    setlocale(LC_ALL, «Russian»);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    double winter = lol[0].ReturnT_Winter;
    double summer = lol[0].ReturnT_Summer;
    NewCountry* lol;
    cout << «КОЛИЧЕСТВО СТРАН: «;
    cin >> N;
    lol = new NewCountry[N];
    cout << «Введите данныеnНазвание страны , температура зимой,весной и летом, в каком полушарии находится (1 — северное, 2 — южное, 3 — по обе стороны экватора ):nn»;
    for ( int i = 0; i < N; i++) cin >> lol[i];
    for ( int i = 0; i < N; i++)
    {
    if (winter < lol[i].ReturnT_Winter())
    winter = lol[i].ReturnT_Winter();
    if (summer > lol[i].ReturnT_Summer ())
    summer = lol[i].ReturnT_Summer();
    }
    };
    cout << «nПроверка оператора =n»;
    lol[0] = lol[1];
    cout << lol[0] << endl;
    cout << lol[1] << endl;
    cout << «nПроверка конструктора копированияn»;
    NewCountry Copy(lol[2]);
    cout << Copy << endl;
    cout << lol[2] << endl;
    delete[] lol;
    system(«pause»);
    };

    Содержание

    1. Как исправить ошибку «cout не является однозначным»?
    2. Как исправить ошибку «cout не является однозначным»?
    3. Неоднозначность переменной count
    4. Решение
    5. Cout не является однозначным ошибка c
    6. Решение
    7. Решение
    8. Идентификатор не объявлен The identifier is undeclared
    9. 1. Статическая инициализация
    10. Логические операторы
    11. Короткий цикл вычислений
    12. Пример: сбой выведения типа C++/CLI Example: C++/CLI type deduction failure
    13. А где же побитовое исключающее ИЛИ (XOR)?

    А так же выдает ошибку ‘эта переменная не содержит класс хранения или спецификатор типа’
    В чем проблема?(
    Подскажите пожаалулйстааа))))

    #include
    #include
    using namespace std;

    country();
    country(char* aname , double at_winter, double at_spring,double at_summer,double at_autumn);
    country(const country& CONTRY);

    char* name;
    double t_winter, t_spring, t_summer, t_autumn;

    class NewCountry : public country <
    public:

    NewCountry();
    NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie);
    NewCountry(const NewCountry& COUNTRY);

    unsigned short int gpolusharie() < return polusharie; >;
    string sReturnpolusharie();

    private:
    unsigned short int polusharie;
    >;

    country::country()
    <
    name = NULL;
    t_winter = NULL;
    t_spring = NULL;
    t_summer = NULL;
    t_autumn = NULL;
    >;

    country::country(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn) :
    name(new char[strlen(aname) + 1])
    <
    strcpy_s(name, strlen(aname) + 1, aname);
    t_winter = at_winter;
    t_spring = at_spring;
    t_summer = at_summer;
    t_autumn = at_autumn;
    >;

    ostream& operator >(istream& In, country& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    country& country::operator=(const country& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    name = COUNTRY.name;
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    return *this;
    >;

    NewCountry::NewCountry() :
    country()
    <
    polusharie = NULL;
    >;

    NewCountry::NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie) :
    country(aname,at_winter, at_spring, at_summer, at_autumn)
    <
    polusharie = apolusharie;
    >;

    string NewCountry::sReturnpolusharie() <
    if (polusharie == 1) return «северное»;
    if (polusharie == 2) return «южное»;
    if (polusharie == 3) return «по обе стороны экватора»;
    return «. ОШИБКА:данные отсутствуют. «;
    >;

    ostream& operator >(istream& In, NewCountry& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn >> COUNTRY.polusharie;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    NewCountry& NewCountry::operator=(const NewCountry& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    polusharie = COUNTRY.polusharie;
    return *this;
    >;

    void main() <
    setlocale(LC_ALL, «Russian»);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    double winter = lol[0].ReturnT_Winter;
    double summer = lol[0].ReturnT_Summer;
    NewCountry* lol;
    cout > N;
    lol = new NewCountry[N];
    cout > lol[i];
    for ( int i = 0; i lol[i].ReturnT_Summer ())
    summer = lol[i].ReturnT_Summer();
    >
    >;
    cout Вопрос задан более двух лет назад

  • 2539 просмотров
  • Источник

    Как исправить ошибку «cout не является однозначным»?

    А так же выдает ошибку ‘эта переменная не содержит класс хранения или спецификатор типа’
    В чем проблема?(
    Подскажите пожаалулйстааа))))

    #include
    #include
    using namespace std;

    country();
    country(char* aname , double at_winter, double at_spring,double at_summer,double at_autumn);
    country(const country& CONTRY);

    char* name;
    double t_winter, t_spring, t_summer, t_autumn;

    class NewCountry : public country <
    public:

    NewCountry();
    NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie);
    NewCountry(const NewCountry& COUNTRY);

    unsigned short int gpolusharie() < return polusharie; >;
    string sReturnpolusharie();

    private:
    unsigned short int polusharie;
    >;

    country::country()
    <
    name = NULL;
    t_winter = NULL;
    t_spring = NULL;
    t_summer = NULL;
    t_autumn = NULL;
    >;

    country::country(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn) :
    name(new char[strlen(aname) + 1])
    <
    strcpy_s(name, strlen(aname) + 1, aname);
    t_winter = at_winter;
    t_spring = at_spring;
    t_summer = at_summer;
    t_autumn = at_autumn;
    >;

    ostream& operator >(istream& In, country& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    country& country::operator=(const country& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    name = COUNTRY.name;
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    return *this;
    >;

    NewCountry::NewCountry() :
    country()
    <
    polusharie = NULL;
    >;

    NewCountry::NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie) :
    country(aname,at_winter, at_spring, at_summer, at_autumn)
    <
    polusharie = apolusharie;
    >;

    string NewCountry::sReturnpolusharie() <
    if (polusharie == 1) return «северное»;
    if (polusharie == 2) return «южное»;
    if (polusharie == 3) return «по обе стороны экватора»;
    return «. ОШИБКА:данные отсутствуют. «;
    >;

    ostream& operator >(istream& In, NewCountry& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn >> COUNTRY.polusharie;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    NewCountry& NewCountry::operator=(const NewCountry& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    polusharie = COUNTRY.polusharie;
    return *this;
    >;

    void main() <
    setlocale(LC_ALL, «Russian»);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    double winter = lol[0].ReturnT_Winter;
    double summer = lol[0].ReturnT_Summer;
    NewCountry* lol;
    cout > N;
    lol = new NewCountry[N];
    cout > lol[i];
    for ( int i = 0; i lol[i].ReturnT_Summer ())
    summer = lol[i].ReturnT_Summer();
    >
    >;
    cout Вопрос задан более двух лет назад

  • 2539 просмотров
  • Источник

    Неоднозначность переменной count

    Доброго времени суток. Использую VS2013. Подскажите пожалуйста, по какой причине глобальная переменная, в приведенном ниже коде, не является однозначной и во что её переименовать. Заранее спасибо!
    PS/ Я совсем начинающий ученик, не судите строго)

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

    Нюансы синтаксиса: statement for — как понимать запись for (count=0, mask=1; count != 16; count++, mask 8

    kailinka,
    Рекомендую обращать внимание на компилятор и ИДЕ,если ему(ей) что-то не нравится лучше самостоятельно выяснить в чем проблема и, по возможности,исправить.

    Вот у вас в функции func2/0 есть локальная переменная.Её обязательно называть count?
    Какую переменную вы хотите,чтобы использовал компилятор?

    Добавлено через 5 минут
    Заодно можете ознакомится с темой:
    Вопрос об области видимости переменной

    S_el, локальная переменная просто «перекроет» глобальную. Проблема в using’е. В студии в неявно подрубается (или только некоторые объявления из него, не знаю).

    kailinka, уберите using namespace std или назовите переменные count по другому.
    В STL есть сущность с именем count, с ней и происходит конфликт имен.
    using namespace std

    Решение

    Шилдт просто не мог предсказать как включаются заголовки в мелкомягком компиляторе. А так код вполне себе валидный.

    Добавлено через 39 секунд

    Спасибо! Получилось!

    Добавлено через 11 минут
    Получилось чтобы не выдавались ошибки, но программа при отладке пишет что то типа » cout не является внутренней или внешней командой, не является каким-то файлом», не успеваю прочитать более подробно т.к. не смотря на system(«Pausa>nul»); cmd оч быстро закрывается(.

    Добавлено через 12 минут
    Вопрос решила! Ругался как раз таки на system(«Pausa>nul»);, теперь буду искать решение проблемы с закрывающейся cmd. Всем большое спасибо за ответы!

    Источник

    Cout не является однозначным ошибка c

    Дополнительные сведения о: Ошибка компилятора C2065

    Решение

    прежде чем любые другие включают директивы.

    Решение

    прежде чем любые другие включают директивы.

    Я только начал разбираться с плюсами. И тут же воткнулся в какой-то непонятный для меня косяк.

    Вроде все верно. Но при компиляции ошибка:

    Я почитал у вас тут похожие темы. Пишут, что область имен надо объявить, она есть. Вроде вообще все как надо. Я использую VS 2017 для написания кода. Объясните, пожалуйста, что не так.

    Двоичное дерево поиска
    Задание. Построение и обработка двоичных деревьев поиска. Реализовать программу, выполняющую следующий набор операций с деревьями поиска:

    поиск вершины с заданным значением ключа с выводом счетчика числа появлений данного ключа
    добавление новой вершины в соответствии со значением ее ключа или увеличение счетчика числа появлений
    построчный вывод дерева в наглядном виде с помощью обратно-симметричного обхода
    вывод всех вершин в одну строку по порядку следования ключей с указанием для каждой вершины значения ее счетчика появлений
    удаление вершины с заданным значением ключа

    Выдает (в VS 2012) следующие ошибки:

    Т. Е. он утв-ет что count не является однозначным и не определен

    Идентификатор не объявлен The identifier is undeclared

    Если идентификатор является переменной или именем функции, его необходимо объявить перед тем, как его можно будет использовать. If the identifier is a variable or a function name, you must declare it before it can be used. Перед использованием функции в объявлении функции также должны быть включены типы его параметров. A function declaration must also include the types of its parameters before the function can be used. Если переменная объявлена с помощью auto , компилятор должен иметь возможность определить тип из его инициализатора. If the variable is declared using auto, the compiler must be able to infer the type from its initializer.

    Если идентификатор является членом класса или структуры или объявлен в пространстве имен, он должен уточняться именем класса или структуры или именем пространства имен при использовании вне структуры, класса или области пространства имен. If the identifier is a member of a class or struct, or declared in a namespace, it must be qualified by the class or struct name, or the namespace name, when used outside the struct, class, or namespace scope. Кроме того, пространство имен должно быть помещено в область с помощью using директивы, такой как using namespace std; , или имя члена должно быть помещено в область с помощью using объявления, такого как using std::string; . Alternatively, the namespace must be brought into scope by a using directive such as using namespace std;, or the member name must be brought into scope by a using declaration, such as using std::string;. В противном случае неполное имя считается необъявленным идентификатором в текущей области. Otherwise, the unqualified name is considered to be an undeclared identifier in the current scope.

    Если идентификатор является тегом для определяемого пользователем типа, например, class или struct , тип тега должен быть объявлен до его использования. If the identifier is the tag for a user-defined type, for example, a class or struct, the type of the tag must be declared before it can be used. Например, объявление struct SomeStruct < /*…*/ >; должно существовать, прежде чем можно будет объявить переменную SomeStruct myStruct; в коде. For example, the declaration struct SomeStruct < /*…*/ >; must exist before you can declare a variable SomeStruct myStruct; in your code.

    Если идентификатор является псевдонимом типа, тип должен быть объявлен с помощью using объявления или typedef перед тем, как его можно будет использовать. If the identifier is a type alias, the type must be declared by using a using declaration or typedef before it can be used. Например, необходимо объявить, using my_flags = std::ios_base::fmtflags; прежде чем можно будет использовать my_flags в качестве псевдонима типа для std::ios_base::fmtflags . For example, you must declare using my_flags = std::ios_base::fmtflags; before you can use my_flags as a type alias for std::ios_base::fmtflags.

    1. Статическая инициализация

    При создании статической переменной, возникает вопрос, когда эта переменная будет инициализирована, сколько времени она проживёт и когда будет уничтожена? Статическая инициализация позволяет нам создать переменную, которая будет инициализирована до запуска программы со временем жизни в течение всей программы и уничтожении после завершения. Такие константные переменные не зависят от исполнения — они всегда существуют, создаются во время компиляции и располагаются в исполнимом файле (в бинарнике). Как результат: нулевые накладные расходы, ранняя диагностика проблем и безопасность. Вопрос об использовании статической инициализации напрямую зависит от предметной области разрабатываемого проекта — чем ниже уровень, тем соблазн использования выше, а иногда и критичен, тут скорость решает всё.

    Логические операторы

    В то время как операторы сравнения используются для проверки конкретного условия: ложное оно или истинное, они могут проверить только одно условие за определенный промежуток времени. Но бывают ситуации, когда нужно протестировать сразу несколько условий. Например, чтобы узнать, выиграли ли мы в лотерею, нам нужно сравнить все цифры купленного билета с выигрышными. Если в лотерее 6 цифр, то нужно выполнить 6 сравнений, все из которых должны быть true.

    Также иногда нам нужно знать, является ли хоть одно из нескольких условий истинным. Например, мы не пойдем сегодня на работу, если больны или слишком устали, или если выиграли в лотерею. Нам нужно проверить, является ли хоть одно из этих 3-х условий истинным. Как это сделать? С помощью логических операторов! Они позволяют проверить сразу несколько условий за раз.

    В языке C++ есть 3 логических оператора:

    Оператор Символ Пример Операция
    Логическое НЕ ! !x true, если x — false и false, если x — true
    Логическое И && x && y true, если x и y — true, в противном случае — false
    Логическое ИЛИ || x || y true, если x или y — true, в противном случае — false

    Короткий цикл вычислений

    Для того, чтобы логическое И возвращало true, оба операнда должны быть истинными. Если первый операнд вычисляется как false, то оператор И должен сразу возвращать false независимо от результата второго операнда (даже без его обработки). Это называется коротким циклом вычисления (англ. «short circuit evaluation») и выполняется он, в первую очередь, в целях оптимизации.

    Аналогично, если первый операнд логического ИЛИ является true, то и всё условие будет true (даже без обработки второго операнда).

    Как и в случае с оператором ИЛИ, новички иногда путают логическое И (&&) с побитовым И (&).

    Пример: сбой выведения типа C++/CLI Example: C++/CLI type deduction failure

    Эта ошибка может возникать при вызове универсальной функции, если аргумент предполагаемого типа не может быть выведен из используемых параметров. This error can occur when calling a generic function, if the intended type argument cannot be deduced from the parameters used. Дополнительные сведения см. в разделе универсальные функции (C++/CLI). For more information, see Generic Functions (C++/CLI).

    А где же побитовое исключающее ИЛИ (XOR)?

    Побитовое исключающее ИЛИ (XOR) — это логический оператор, который используется в некоторых языках программирования для проверки на истинность нечётного количества условий.

    Побитовое исключающее ИЛИ (XOR)
    Левый операнд Правый операнд Результат
    false false false
    false true true
    true false true
    true true false

    В языке C++ нет такого оператора. В отличии от логических И/ИЛИ, к XOR не применяется короткий цикл вычислений. Однако его легко можно сымитировать, используя оператор неравенства (!=):

    if ( a != b ) . . . // a XOR b (предполагается, что a и b имеют тип bool)

    Можно также расширить количество операндов:

    if ( a != b != c != d ) . . . // a XOR b XOR c XOR d (предполагается, что a, b, c и d имеют тип bool)

    Следует отметить, что вышеприведенные шаблоны XOR работают только, если операнды имеют логический (а не целочисленный) тип данных. Если вы хотите, чтобы это работало и с целыми числами, то используйте оператор static_cast.

    Форма XOR, которая работает и с другими типами данных (с помощью оператора static_cast мы можем конвертировать любой тип данных в тип bool):

    if ( static_cast bool > ( a ) != static_cast bool > ( b ) != static_cast bool > ( c ) != static_cast bool > ( d ) ) . . . // a XOR b XOR c XOR d, для любого типа, который может быть конвертирован в тип bool

    Источник

    А так же выдает ошибку ‘эта переменная не содержит класс хранения или спецификатор типа’
    В чем проблема?(
    Подскажите пожаалулйстааа))))

    #include
    #include
    using namespace std;

    class country
    {

    public:

    country();
    country(char* aname , double at_winter, double at_spring,double at_summer,double at_autumn);
    country(const country& CONTRY);
    ~country();

    char* Returnname() { return name; };
    double ReturnT_Winter() { return t_winter; };
    double ReturnT_Spring() { return t_spring; };
    double ReturnT_Summer() { return t_summer; };
    double ReturnT_Autumn() { return t_autumn; };

    friend ostream& operator<<(ostream& OUT, const country& COUNTRY);
    friend istream& operator>>(istream& IN, country& COUNTRY);

    country& operator=(const country& COUNTRY);

    protected:

    char* name;
    double t_winter, t_spring, t_summer, t_autumn;

    };

    class NewCountry : public country {
    public:

    NewCountry();
    NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie);
    NewCountry(const NewCountry& COUNTRY);
    ~NewCountry();

    unsigned short int gpolusharie() { return polusharie; };
    string sReturnpolusharie();

    friend ostream& operator<<(ostream& OUT, const NewCountry& COUNTRY);
    friend istream& operator>>(istream& IN, NewCountry& COUNTRY);

    NewCountry& operator=(const NewCountry& COUNTRY);

    private:
    unsigned short int polusharie;
    };

    country::country()
    {
    name = NULL;
    t_winter = NULL;
    t_spring = NULL;
    t_summer = NULL;
    t_autumn = NULL;
    };

    country::country(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn) :
    name(new char[strlen(aname) + 1])
    {
    strcpy_s(name, strlen(aname) + 1, aname);
    t_winter = at_winter;
    t_spring = at_spring;
    t_summer = at_summer;
    t_autumn = at_autumn;
    };

    country::country(const country& COUNTRY) :
    name(new char[strlen(COUNTRY.name) + 1])
    {
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    };

    country::~country()
    {
    delete[] name;
    };

    ostream& operator<<(ostream& Out, const country& COUNTRY)
    {
    Out << «nСТРАНА: » << COUNTRY.name << «nТЕМПЕРАТУРА ЗИМОЙ» << COUNTRY.t_winter << «nТЕМПЕРАТУРА ВЕСНОЙ» << COUNTRY.t_spring << «nТЕМПЕРАТУРА ЛЕТОМ» << COUNTRY.t_summer << «nТЕМПЕРАТУРА ОСЕНЬЮ » << COUNTRY.t_autumn;

    return Out;
    };

    istream& operator>>(istream& In, country& COUNTRY)
    {
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    };

    country& country::operator=(const country& COUNTRY) {
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    name = COUNTRY.name;
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    return *this;
    };

    NewCountry::NewCountry() :
    country()
    {
    polusharie = NULL;
    };

    NewCountry::NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie) :
    country(aname,at_winter, at_spring, at_summer, at_autumn)
    {
    polusharie = apolusharie;
    };

    NewCountry::NewCountry(const NewCountry& COUNTRY) :
    country(COUNTRY)
    {
    polusharie = COUNTRY.polusharie;
    };

    NewCountry::~NewCountry()
    {
    delete[]name;
    };

    string NewCountry::sReturnpolusharie() {
    if (polusharie == 1) return «северное»;
    if (polusharie == 2) return «южное»;
    if (polusharie == 3) return «по обе стороны экватора»;
    return «!!!ОШИБКА:данные отсутствуют!!!»;
    };

    ostream& operator<<(ostream& Out, const NewCountry& COUNTRY)
    {
    Out << «nСТРАНА: » << COUNTRY.name << «nТЕМПЕРАТУРА ЗИМОЙ» << COUNTRY.t_winter << «nТЕМПЕРАТУРА ВЕСНОЙ» << COUNTRY.t_spring << «nТЕМПЕРАТУРА ЛЕТОМ» << COUNTRY.t_summer << «nТЕМПЕРАТУРА ОСЕНЬЮ » << COUNTRY.t_autumn;
    Out << «nРАСПОЛОЖЕНИЕ ОТНОСИТЕЛЬНО ЭКВАТОРА: «;
    if (COUNTRY.polusharie == 1) Out << «СЕВЕРНОЕ»;
    if (COUNTRY.polusharie == 2) Out << «ЮЖНОЕ»;
    if (COUNTRY.polusharie == 3) Out << «ПО ОБЕ СТОРОНЫ ЭКВАТОРА»;
    return Out;
    };

    istream& operator>>(istream& In, NewCountry& COUNTRY)
    {
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn >> COUNTRY.polusharie;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    };

    NewCountry& NewCountry::operator=(const NewCountry& COUNTRY) {
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    polusharie = COUNTRY.polusharie;
    return *this;
    };

    void main() {
    setlocale(LC_ALL, «Russian»);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    double winter = lol[0].ReturnT_Winter;
    double summer = lol[0].ReturnT_Summer;
    NewCountry* lol;
    cout << «КОЛИЧЕСТВО СТРАН: «;
    cin >> N;
    lol = new NewCountry[N];
    cout << «Введите данныеnНазвание страны , температура зимой,весной и летом, в каком полушарии находится (1 — северное, 2 — южное, 3 — по обе стороны экватора ):nn»;
    for ( int i = 0; i < N; i++) cin >> lol[i];
    for ( int i = 0; i < N; i++)
    {
    if (winter < lol[i].ReturnT_Winter())
    winter = lol[i].ReturnT_Winter();
    if (summer > lol[i].ReturnT_Summer ())
    summer = lol[i].ReturnT_Summer();
    }
    };
    cout << «nПроверка оператора =n»;
    lol[0] = lol[1];
    cout << lol[0] << endl;
    cout << lol[1] << endl;
    cout << «nПроверка конструктора копированияn»;
    NewCountry Copy(lol[2]);
    cout << Copy << endl;
    cout << lol[2] << endl;
    delete[] lol;
    system(«pause»);
    };

    Содержание

    1. Как исправить ошибку «cout не является однозначным»?
    2. Как исправить ошибку «cout не является однозначным»?
    3. Неоднозначность переменной count
    4. Решение
    5. Cout не является однозначным ошибка c
    6. Решение
    7. Решение
    8. Идентификатор не объявлен The identifier is undeclared
    9. 1. Статическая инициализация
    10. Логические операторы
    11. Короткий цикл вычислений
    12. Пример: сбой выведения типа C++/CLI Example: C++/CLI type deduction failure
    13. А где же побитовое исключающее ИЛИ (XOR)?

    А так же выдает ошибку ‘эта переменная не содержит класс хранения или спецификатор типа’
    В чем проблема?(
    Подскажите пожаалулйстааа))))

    #include
    #include
    using namespace std;

    country();
    country(char* aname , double at_winter, double at_spring,double at_summer,double at_autumn);
    country(const country& CONTRY);

    char* name;
    double t_winter, t_spring, t_summer, t_autumn;

    class NewCountry : public country <
    public:

    NewCountry();
    NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie);
    NewCountry(const NewCountry& COUNTRY);

    unsigned short int gpolusharie() < return polusharie; >;
    string sReturnpolusharie();

    private:
    unsigned short int polusharie;
    >;

    country::country()
    <
    name = NULL;
    t_winter = NULL;
    t_spring = NULL;
    t_summer = NULL;
    t_autumn = NULL;
    >;

    country::country(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn) :
    name(new char[strlen(aname) + 1])
    <
    strcpy_s(name, strlen(aname) + 1, aname);
    t_winter = at_winter;
    t_spring = at_spring;
    t_summer = at_summer;
    t_autumn = at_autumn;
    >;

    ostream& operator >(istream& In, country& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    country& country::operator=(const country& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    name = COUNTRY.name;
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    return *this;
    >;

    NewCountry::NewCountry() :
    country()
    <
    polusharie = NULL;
    >;

    NewCountry::NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie) :
    country(aname,at_winter, at_spring, at_summer, at_autumn)
    <
    polusharie = apolusharie;
    >;

    string NewCountry::sReturnpolusharie() <
    if (polusharie == 1) return «северное»;
    if (polusharie == 2) return «южное»;
    if (polusharie == 3) return «по обе стороны экватора»;
    return «. ОШИБКА:данные отсутствуют. «;
    >;

    ostream& operator >(istream& In, NewCountry& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn >> COUNTRY.polusharie;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    NewCountry& NewCountry::operator=(const NewCountry& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    polusharie = COUNTRY.polusharie;
    return *this;
    >;

    void main() <
    setlocale(LC_ALL, «Russian»);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    double winter = lol[0].ReturnT_Winter;
    double summer = lol[0].ReturnT_Summer;
    NewCountry* lol;
    cout > N;
    lol = new NewCountry[N];
    cout > lol[i];
    for ( int i = 0; i lol[i].ReturnT_Summer ())
    summer = lol[i].ReturnT_Summer();
    >
    >;
    cout Вопрос задан более двух лет назад

  • 2539 просмотров
  • Источник

    Как исправить ошибку «cout не является однозначным»?

    А так же выдает ошибку ‘эта переменная не содержит класс хранения или спецификатор типа’
    В чем проблема?(
    Подскажите пожаалулйстааа))))

    #include
    #include
    using namespace std;

    country();
    country(char* aname , double at_winter, double at_spring,double at_summer,double at_autumn);
    country(const country& CONTRY);

    char* name;
    double t_winter, t_spring, t_summer, t_autumn;

    class NewCountry : public country <
    public:

    NewCountry();
    NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie);
    NewCountry(const NewCountry& COUNTRY);

    unsigned short int gpolusharie() < return polusharie; >;
    string sReturnpolusharie();

    private:
    unsigned short int polusharie;
    >;

    country::country()
    <
    name = NULL;
    t_winter = NULL;
    t_spring = NULL;
    t_summer = NULL;
    t_autumn = NULL;
    >;

    country::country(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn) :
    name(new char[strlen(aname) + 1])
    <
    strcpy_s(name, strlen(aname) + 1, aname);
    t_winter = at_winter;
    t_spring = at_spring;
    t_summer = at_summer;
    t_autumn = at_autumn;
    >;

    ostream& operator >(istream& In, country& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    country& country::operator=(const country& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    name = COUNTRY.name;
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    return *this;
    >;

    NewCountry::NewCountry() :
    country()
    <
    polusharie = NULL;
    >;

    NewCountry::NewCountry(char* aname, double at_winter, double at_spring, double at_summer, double at_autumn, int apolusharie) :
    country(aname,at_winter, at_spring, at_summer, at_autumn)
    <
    polusharie = apolusharie;
    >;

    string NewCountry::sReturnpolusharie() <
    if (polusharie == 1) return «северное»;
    if (polusharie == 2) return «южное»;
    if (polusharie == 3) return «по обе стороны экватора»;
    return «. ОШИБКА:данные отсутствуют. «;
    >;

    ostream& operator >(istream& In, NewCountry& COUNTRY)
    <
    char TEMP[123];
    In >> TEMP >> COUNTRY.t_winter >> COUNTRY.t_spring >> COUNTRY.t_summer >> COUNTRY.t_autumn >> COUNTRY.polusharie;
    delete[] COUNTRY.name;
    COUNTRY.name = new char[strlen(TEMP) + 1];
    strcpy_s(COUNTRY.name, strlen(TEMP) + 1, TEMP);
    return In;
    >;

    NewCountry& NewCountry::operator=(const NewCountry& COUNTRY) <
    if (this == &COUNTRY) return *this;
    delete[] name;
    name = new char[strlen(COUNTRY.name) + 1];
    strcpy_s(name, strlen(COUNTRY.name) + 1, COUNTRY.name);
    t_winter = COUNTRY.t_winter;
    t_spring = COUNTRY.t_spring;
    t_summer = COUNTRY.t_summer;
    t_autumn = COUNTRY.t_autumn;
    polusharie = COUNTRY.polusharie;
    return *this;
    >;

    void main() <
    setlocale(LC_ALL, «Russian»);
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int N;
    double winter = lol[0].ReturnT_Winter;
    double summer = lol[0].ReturnT_Summer;
    NewCountry* lol;
    cout > N;
    lol = new NewCountry[N];
    cout > lol[i];
    for ( int i = 0; i lol[i].ReturnT_Summer ())
    summer = lol[i].ReturnT_Summer();
    >
    >;
    cout Вопрос задан более двух лет назад

  • 2539 просмотров
  • Источник

    Неоднозначность переменной count

    Доброго времени суток. Использую VS2013. Подскажите пожалуйста, по какой причине глобальная переменная, в приведенном ниже коде, не является однозначной и во что её переименовать. Заранее спасибо!
    PS/ Я совсем начинающий ученик, не судите строго)

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

    Нюансы синтаксиса: statement for — как понимать запись for (count=0, mask=1; count != 16; count++, mask 8

    kailinka,
    Рекомендую обращать внимание на компилятор и ИДЕ,если ему(ей) что-то не нравится лучше самостоятельно выяснить в чем проблема и, по возможности,исправить.

    Вот у вас в функции func2/0 есть локальная переменная.Её обязательно называть count?
    Какую переменную вы хотите,чтобы использовал компилятор?

    Добавлено через 5 минут
    Заодно можете ознакомится с темой:
    Вопрос об области видимости переменной

    S_el, локальная переменная просто «перекроет» глобальную. Проблема в using’е. В студии в неявно подрубается (или только некоторые объявления из него, не знаю).

    kailinka, уберите using namespace std или назовите переменные count по другому.
    В STL есть сущность с именем count, с ней и происходит конфликт имен.
    using namespace std

    Решение

    Шилдт просто не мог предсказать как включаются заголовки в мелкомягком компиляторе. А так код вполне себе валидный.

    Добавлено через 39 секунд

    Спасибо! Получилось!

    Добавлено через 11 минут
    Получилось чтобы не выдавались ошибки, но программа при отладке пишет что то типа » cout не является внутренней или внешней командой, не является каким-то файлом», не успеваю прочитать более подробно т.к. не смотря на system(«Pausa>nul»); cmd оч быстро закрывается(.

    Добавлено через 12 минут
    Вопрос решила! Ругался как раз таки на system(«Pausa>nul»);, теперь буду искать решение проблемы с закрывающейся cmd. Всем большое спасибо за ответы!

    Источник

    Cout не является однозначным ошибка c

    Дополнительные сведения о: Ошибка компилятора C2065

    Решение

    прежде чем любые другие включают директивы.

    Решение

    прежде чем любые другие включают директивы.

    Я только начал разбираться с плюсами. И тут же воткнулся в какой-то непонятный для меня косяк.

    Вроде все верно. Но при компиляции ошибка:

    Я почитал у вас тут похожие темы. Пишут, что область имен надо объявить, она есть. Вроде вообще все как надо. Я использую VS 2017 для написания кода. Объясните, пожалуйста, что не так.

    Двоичное дерево поиска
    Задание. Построение и обработка двоичных деревьев поиска. Реализовать программу, выполняющую следующий набор операций с деревьями поиска:

    поиск вершины с заданным значением ключа с выводом счетчика числа появлений данного ключа
    добавление новой вершины в соответствии со значением ее ключа или увеличение счетчика числа появлений
    построчный вывод дерева в наглядном виде с помощью обратно-симметричного обхода
    вывод всех вершин в одну строку по порядку следования ключей с указанием для каждой вершины значения ее счетчика появлений
    удаление вершины с заданным значением ключа

    Выдает (в VS 2012) следующие ошибки:

    Т. Е. он утв-ет что count не является однозначным и не определен

    Идентификатор не объявлен The identifier is undeclared

    Если идентификатор является переменной или именем функции, его необходимо объявить перед тем, как его можно будет использовать. If the identifier is a variable or a function name, you must declare it before it can be used. Перед использованием функции в объявлении функции также должны быть включены типы его параметров. A function declaration must also include the types of its parameters before the function can be used. Если переменная объявлена с помощью auto , компилятор должен иметь возможность определить тип из его инициализатора. If the variable is declared using auto, the compiler must be able to infer the type from its initializer.

    Если идентификатор является членом класса или структуры или объявлен в пространстве имен, он должен уточняться именем класса или структуры или именем пространства имен при использовании вне структуры, класса или области пространства имен. If the identifier is a member of a class or struct, or declared in a namespace, it must be qualified by the class or struct name, or the namespace name, when used outside the struct, class, or namespace scope. Кроме того, пространство имен должно быть помещено в область с помощью using директивы, такой как using namespace std; , или имя члена должно быть помещено в область с помощью using объявления, такого как using std::string; . Alternatively, the namespace must be brought into scope by a using directive such as using namespace std;, or the member name must be brought into scope by a using declaration, such as using std::string;. В противном случае неполное имя считается необъявленным идентификатором в текущей области. Otherwise, the unqualified name is considered to be an undeclared identifier in the current scope.

    Если идентификатор является тегом для определяемого пользователем типа, например, class или struct , тип тега должен быть объявлен до его использования. If the identifier is the tag for a user-defined type, for example, a class or struct, the type of the tag must be declared before it can be used. Например, объявление struct SomeStruct < /*…*/ >; должно существовать, прежде чем можно будет объявить переменную SomeStruct myStruct; в коде. For example, the declaration struct SomeStruct < /*…*/ >; must exist before you can declare a variable SomeStruct myStruct; in your code.

    Если идентификатор является псевдонимом типа, тип должен быть объявлен с помощью using объявления или typedef перед тем, как его можно будет использовать. If the identifier is a type alias, the type must be declared by using a using declaration or typedef before it can be used. Например, необходимо объявить, using my_flags = std::ios_base::fmtflags; прежде чем можно будет использовать my_flags в качестве псевдонима типа для std::ios_base::fmtflags . For example, you must declare using my_flags = std::ios_base::fmtflags; before you can use my_flags as a type alias for std::ios_base::fmtflags.

    1. Статическая инициализация

    При создании статической переменной, возникает вопрос, когда эта переменная будет инициализирована, сколько времени она проживёт и когда будет уничтожена? Статическая инициализация позволяет нам создать переменную, которая будет инициализирована до запуска программы со временем жизни в течение всей программы и уничтожении после завершения. Такие константные переменные не зависят от исполнения — они всегда существуют, создаются во время компиляции и располагаются в исполнимом файле (в бинарнике). Как результат: нулевые накладные расходы, ранняя диагностика проблем и безопасность. Вопрос об использовании статической инициализации напрямую зависит от предметной области разрабатываемого проекта — чем ниже уровень, тем соблазн использования выше, а иногда и критичен, тут скорость решает всё.

    Логические операторы

    В то время как операторы сравнения используются для проверки конкретного условия: ложное оно или истинное, они могут проверить только одно условие за определенный промежуток времени. Но бывают ситуации, когда нужно протестировать сразу несколько условий. Например, чтобы узнать, выиграли ли мы в лотерею, нам нужно сравнить все цифры купленного билета с выигрышными. Если в лотерее 6 цифр, то нужно выполнить 6 сравнений, все из которых должны быть true.

    Также иногда нам нужно знать, является ли хоть одно из нескольких условий истинным. Например, мы не пойдем сегодня на работу, если больны или слишком устали, или если выиграли в лотерею. Нам нужно проверить, является ли хоть одно из этих 3-х условий истинным. Как это сделать? С помощью логических операторов! Они позволяют проверить сразу несколько условий за раз.

    В языке C++ есть 3 логических оператора:

    Оператор Символ Пример Операция
    Логическое НЕ ! !x true, если x — false и false, если x — true
    Логическое И && x && y true, если x и y — true, в противном случае — false
    Логическое ИЛИ || x || y true, если x или y — true, в противном случае — false

    Короткий цикл вычислений

    Для того, чтобы логическое И возвращало true, оба операнда должны быть истинными. Если первый операнд вычисляется как false, то оператор И должен сразу возвращать false независимо от результата второго операнда (даже без его обработки). Это называется коротким циклом вычисления (англ. «short circuit evaluation») и выполняется он, в первую очередь, в целях оптимизации.

    Аналогично, если первый операнд логического ИЛИ является true, то и всё условие будет true (даже без обработки второго операнда).

    Как и в случае с оператором ИЛИ, новички иногда путают логическое И (&&) с побитовым И (&).

    Пример: сбой выведения типа C++/CLI Example: C++/CLI type deduction failure

    Эта ошибка может возникать при вызове универсальной функции, если аргумент предполагаемого типа не может быть выведен из используемых параметров. This error can occur when calling a generic function, if the intended type argument cannot be deduced from the parameters used. Дополнительные сведения см. в разделе универсальные функции (C++/CLI). For more information, see Generic Functions (C++/CLI).

    А где же побитовое исключающее ИЛИ (XOR)?

    Побитовое исключающее ИЛИ (XOR) — это логический оператор, который используется в некоторых языках программирования для проверки на истинность нечётного количества условий.

    Побитовое исключающее ИЛИ (XOR)
    Левый операнд Правый операнд Результат
    false false false
    false true true
    true false true
    true true false

    В языке C++ нет такого оператора. В отличии от логических И/ИЛИ, к XOR не применяется короткий цикл вычислений. Однако его легко можно сымитировать, используя оператор неравенства (!=):

    if ( a != b ) . . . // a XOR b (предполагается, что a и b имеют тип bool)

    Можно также расширить количество операндов:

    if ( a != b != c != d ) . . . // a XOR b XOR c XOR d (предполагается, что a, b, c и d имеют тип bool)

    Следует отметить, что вышеприведенные шаблоны XOR работают только, если операнды имеют логический (а не целочисленный) тип данных. Если вы хотите, чтобы это работало и с целыми числами, то используйте оператор static_cast.

    Форма XOR, которая работает и с другими типами данных (с помощью оператора static_cast мы можем конвертировать любой тип данных в тип bool):

    if ( static_cast bool > ( a ) != static_cast bool > ( b ) != static_cast bool > ( c ) != static_cast bool > ( d ) ) . . . // a XOR b XOR c XOR d, для любого типа, который может быть конвертирован в тип bool

    Источник

    Понравилась статья? Поделить с друзьями:

    Интересное по теме:

  • Ошибка аирбаг ниссан тиида
  • Ошибка ubisoft connect сервис недоступен
  • Ошибка ами админ 12007
  • Ошибка айфон отключен подключитесь к айтюнс что делать
  • Ошибка американ мегатрендс как убрать

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии