я следующий код:Умножение определяемые пользователем массивы в C++
#include <iostream>
#include <array>
typedef std::array<int, 2> eval_t;
eval_t operator*(eval_t e1, eval_t e2) { return {e1[0] * e2[0], e1[1] * e2[1]}; }
int main()
{
eval_t a = {1, 2};
eval_t b = a * {2, 1};
std::cout << "b = (" << b[0] << ',' << b[1] << ')' << std::endl;
}
GCC отказался составить мое умножение:
$ g++ -std=c++11 test.cc
test.cc: In function ‘int main()’:
test.cc:10:17: error: expected primary-expression before ‘{’ token
eval_t b = a * {2, 1};
^
Я наивно надеялся, что единственно возможный оператор *() с eval_t
как левый операнд, будет определяться мной, а правый операнд будет пониматься как eval_t
.
Вместо этого, если я пишу:
eval_t a = {1, 2};
eval_t v = {2, 1};
eval_t b = a * v;
это работает.
Ваш оператор даже не берет 'eval_t' для его умножения, но Clang дает ясную ошибку независимо: * ошибка: список инициализаторов не может использоваться в правой части оператора '\ *' * – chris