Ошибка «Cout неоднозначен» в C++

Osibka Cout Neodnoznacen V C



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

Пример 1:

Это пример неоднозначной ошибки cout, которая чаще всего возникает при программировании на C++. Здесь мы увидим, как компилятор генерирует неоднозначные ошибки в cout, когда мы используем несколько пространств имен. Фрагмент кода этого примера упоминается ниже:







#include

пространство имен ноутбук {

пустота отображать ( ) {

стандартный :: расчет << «это пространство имен ноутбука» << стандартный :: конец ;

}

}

пространство имен мобильный {

пустота отображать ( ) {


стандартный :: расчет << «это мобильное пространство имен» << стандартный :: конец ;

}

}

интервал основной ( ) {

с использованием пространство имен ноутбук ;
с использованием пространство имен мобильный ;

отображать ( ) ;

возвращаться 0 ;


}

Здесь мы взяли программу с двумя пространствами имен, которые определены в соответствии с нашими потребностями. Мы хотим отображать строки на экране. Вывод этого кода прилагается следующим образом:





При выполнении кода выдается ошибка о неоднозначной ситуации. Ошибка генерируется потому, что когда компилятор считывает код, он не получает четких входных данных со стороны пользователя. В нашем коде мы использовали несколько объявлений пространств имен. Во всем коде мы использовали метод display исключительно для отображения вывода на экране. Компилятор понятия не имеет, какой метод отображения относится к какому пространству имен. Нам нужно сделать код простым и понятным, чтобы компилятор легко понимал шаги, не делая код двусмысленным.





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

#include

пространство имен ноутбук {

пустота отображать ( ) {


стандартный :: расчет << «это пространство имен ноутбука» << стандартный :: конец ;

}

}

пространство имен мобильный {

пустота отображать ( ) {

стандартный :: расчет << «это мобильное пространство имен» << стандартный :: конец ;

}

}

интервал основной ( ) {

с использованием пространство имен ноутбук ;
с использованием пространство имен мобильный ;
ноутбук :: отображать ( ) ;
возвращаться 0 ;


}

Здесь мы можем просто связать метод display() с пространством имен «ноутбук» в основной функции, как показано на предыдущем снимке экрана. Теперь запустите программу. Вывод отображается в окне консоли.



Пример 2:

Этот сценарий связан с неоднозначной ошибкой cout в C++. Компилятор выдает ошибку, если не понимает поток выполнения. Фрагмент кода этого примера прилагается ниже:

#include

пространство имен Язык {

пустота Распечатать ( интервал я ) {

стандартный :: расчет << 'Пространство имен языка C: ' << я << стандартный :: конец ;

}

}

пространство имен Джава {

пустота Распечатать ( интервал дж ) {

стандартный :: расчет << 'Пространство имен языка Java: ' << дж << стандартный :: конец ;

}

}

с использованием пространство имен Язык ;

с использованием пространство имен Джава ;

интервал основной ( ) {

Распечатать ( 5 ) ;
возвращаться 0 ;


}

В этом коде мы определяем все необходимые заголовки библиотеки. Мы создаем два пространства имен для разных целей. В пространстве имен «Clanguage» мы определяем метод «print», который принимает целочисленное значение от пользователя. В функции «печать» мы хотим показать значение, которое пользователь передал на экране консоли. Мы отображаем требуемый вывод, используя поток «cout» в нашем коде. После этого мы определяем другое пространство имен с именем «Java».

В этом пространстве имен «Java» мы снова используем метод «print» для отображения значения, которое пользователь передает с помощью «cout». Мы вызываем оба пространства имен для использования в нашей основной функции, чтобы получить желаемый результат в окне консоли на C++. В функции «main» мы вызываем перегруженную функцию «print()», чтобы отобразить переданное значение на экране консоли.

Нажмите кнопку «Выполнить» в главном меню и выберите опцию «Компилировать и запустить». При выполнении этого кода возникает ошибка о неоднозначности. Скриншот ошибки прилагается следующим образом:

Эта ошибка указывает на то, что компилятор запутался в вызываемой перегруженной функции print(). Эта ошибка находится в строке 19, «печать (5)». Компилятор не понимает, к какому пространству имен принадлежит эта перегруженная функция. Новички большую часть времени всегда совершают подобные ошибки.

Давайте исправим эту ошибку, которая на самом деле несложная. Неоднозначные ошибки легко устраняются. Мы должны указать пространство имен вдоль перегруженной функции в «основной» функции для видимости и понимания компилятора. Как и в этой программе, мы добавляем «java::print(5)» в наш существующий код, как указано ниже:

#include

пространство имен Язык {

пустота Распечатать ( интервал я ) {

стандартный :: расчет << 'Пространство имен языка C: ' << я << стандартный :: конец ;

}

}

пространство имен Джава {

пустота Распечатать ( интервал дж ) {

стандартный :: расчет << 'Пространство имен языка Java: ' << дж << стандартный :: конец ;

}

}

с использованием пространство имен Язык ;

с использованием пространство имен Джава ;

интервал основной ( ) {

Джава :: Распечатать ( 5 ) ;
возвращаться 0 ;


}

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

Пример 3:

Это последний и последний пример, связанный с ошибкой, возникшей из-за неоднозначной проблемы. Компилятор не может получить правильный результат. Фрагмент кода этого примера прилагается ниже для лучшего понимания пользователем:

Здесь мы определяем необходимые библиотеки. После этого мы определяем пространство имен, содержащее класс, в котором мы хотим отображать строку в окне консоли. Мы вызываем это определенное пространство имен в функции «main» с переменной «c». После этого мы вызываем метод print(), используя объект пространства имен. Мы снова отображаем строку на экране консоли после вызова метода. Вывод должен быть обеими строками и отображаться на экране консоли. Когда мы выполняем этот код, возникает ошибка, как показано ниже:

#include

с использованием пространство имен стандартный ;

пространство имен мое пространство имен {

сорт расчет {
общественный :
пустота Распечатать ( ) {


расчет << «Индивидуальный расчет» << стандартный :: конец ;

}

} ;

}

интервал основной ( ) {

мое пространство имен :: расчет с ;
в. Распечатать ( ) ;


расчет << 'Привет, мир!' << стандартный :: конец ;

возвращаться 0 ;

}

Компилятор не выбрал оператор cout, который отображает данные на экране консоли. Компилятор не может понять пространство имен, принадлежащее оператору cout, и выдает ошибку. Решением этой ошибки является добавление объекта пространства имен с оператором cout для удобства чтения и понимания компилятора. Добавьте «std::» в оператор cout и запустите код. На экране консоли отображается следующий вывод:

Заключение

Здесь мы можем сказать, что отображение вывода на экране консоли также генерирует ошибку, которая не является ни синтаксической, ни логической ошибкой. Большую часть времени пользователь пишет хороший код, но он непонятен компилятору. Компилятор неоднозначно относится к вводу. Поэтому проясните каждый шаг кода, используя правильное пространство имен и синтаксис, чтобы избежать ошибок в языке программирования C++. Шаги, необходимые для решения этой проблемы, включают использование явных квалификаторов, предотвращение конфликтов пространств имен и обеспечение того, чтобы предполагаемые функции или объекты идентифицировали шаги, необходимые для решения этой проблемы.