#c
#c
Вопрос:
Итак, это мой код
#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int kol=0, x;
cout << "Insert a number: ";
cin >> x;
while (x > 0);
{
div_t output;
output = x;
x = div(output, 10);
kol = kol;
}
cout << "Amount: " << kol << endl;
system ("pause");
return 0;
}
И я получил эту ошибку:
Ошибка 1 ошибка C2679: двоичный файл ‘=’: не найден оператор, который принимает правый операнд типа ‘int’ (или нет приемлемого диалога)
Может кто-нибудь сказать мне, что я сделал не так, и как это исправить?
Комментарии:
1. x — это тип
int
, который вы назначаете для вывода, который является типомdiv_t
,div_t
operator=
имеет ли значение anint
(или что-то еще, что имеет неявное преобразование изint
)?2. Программирование путем угадывания не работает. Что было
output = x
предназначено для выполнения, и где вы прочитали, что это должно быть сделано таким образом? Нам нужно исправить этот ресурс. Также, пожалуйста, сделайте так, чтобы ваш заголовок описывал вопрос; «ошибка, которую я не понимаю» в списке вопросов никому не помогает.
Ответ №1:
Вы обрабатываете div_t как int; это не так. Это структура.
Смотрите http://en.cppreference.com/w/cpp/numeric/math/div
Можете ли вы объяснить, что вы пытаетесь сделать? Очевидно, что предполагается повторяющееся разделение, но это все, что я предполагаю.
Комментарии:
1. Немного больше примеров кодирования, как исправить источник OP, сделало бы ваш ответ действительно отличным,
Ответ №2:
output
является div_t
. x
это an int
, so output = x
похоже на попытку присвоить яблоко апельсину. Вы не можете этого сделать, не установив набор правил для превращения яблока в апельсин.
Мы могли бы попытаться написать такое правило, но зачем беспокоиться? Вместо этого давайте посмотрим на код, который привел нас в это затруднительное положение, и попытаемся выяснить контекст.
while (x > 0);
{
div_t output;
output = x;
x = div(output, 10);
kol = kol;
}
Цель этого цикла, по-видимому, состоит в том, чтобы подсчитать количество раз x
, которое было разделено на десять, и сохранить количество kol
.
div_t
является результатом вызова div
, поэтому присвоение значения результату перед выполнением операции, которая сгенерирует результат, является необычным. Возможно, OP имел в виду
while (x > 0);
{
div_t output;
output = div(x, 10);
kol = kol;
}
разделить x
на десять и получить частное и остаток.
Но этот цикл никогда не завершится, потому x
что он никогда не изменяется. Если оно не равно нулю, цикл никогда не завершится, а если оно равно нулю, цикл никогда не войдет. Возможно
while (x > 0);
{
div_t output;
output = div(x, 10);
x = output.quot;
kol = kol;
}
было бы более уместно. Однако остаток никогда не используется, поэтому div
эффективно тратится впустую и
while (x > 0);
{
x = x / 10; // or x /= 10;
kol = kol;
}
обеспечит тот же результат с гораздо меньшим количеством хлопот.