Почему я не могу сделатьПочему я не могу сделать cout << 3 * ""; '?
cout << 3*" ";
Ошибка:
E:\C++\test\main.cpp|12|error: invalid operands of types 'int.' and 'const char [2]' to binary 'operator*'
Почему я не могу сделатьПочему я не могу сделать cout << 3 * ""; '?
cout << 3*" ";
Ошибка:
E:\C++\test\main.cpp|12|error: invalid operands of types 'int.' and 'const char [2]' to binary 'operator*'
Некоторые языки al низкий оператор умножения, который будет использоваться таким образом. Например Python позволяет писать:
3*" "
и оценивает, что, как
" "
Но C++ не позволяет это использование оператора умножения. Это именно то, что вам сообщает ошибка компиляции.
Вы пытаетесь создать строку, содержащую три пробела. Делайте это, например, с помощью конструктора заполнения стандартного класса строки:
std::string(3, ' ')
И послать что cout
:
std::cout << std::string(3, ' ');
Если он хочет, он может сделать 'std :: string operator * (int i, std :: string x) {std :: string r; тогда как (i -> 0) r + = x; return r; } с использованием пространства имен std :: litals :: string_literals; int main() {std :: cout << 3 * "x" s; return 0; } ' (в C++ 14) и иметь его в двух направлениях: D – Massa
Поскольку нет перегрузки operator*
, что позволяет операнды int
и const char [2]
Выражаясь проще, вы никогда не могли бы умножить 4 на привет в действительности, так почему это разрешено в C++
Как ошибка говорит, что нет operator *
определены для типов int
и const char [2]
(const char [2]
- тип строкового литерала " "
)
Для этой операции можно использовать класс std :: string. Например
std::cout << std::string(3, ' ');
;
Или даже вы могли бы использовать стандартный алгоритм std::fill_n
Например
std::fill_n(std::ostream_iterator<char>(std::cout), 3, ' ');
Есть много подходов, чтобы сделать задачу.
Почему вы должны быть способны? По умолчанию нет оператора *, который принимает число и строку и делает то, что вы хотите. У вас есть контекст или рамки, где это должно быть возможно? Или это простой C++ без расширений? – MatthiasB
Добро пожаловать в переполнение стека! Просто подсказка: попробуйте лучше узнать выход компилятора, 'недопустимые операнды типов 'int'. и 'const char [2]' для двоичного 'оператора *' 'отвечает на ваш вопрос, если вы внимательно его читаете =) – Kahler
std :: cout << std :: setw (5) << ""; –