Как можно исправить ошибку "нет подходящей функции для вызова" и что может быть причиной этой ошибки?

Почему после добавления строк в класс, запрещающих копирование и перемещение, возникает ошибка, указывающая на отсутствие соответствующей функции 'Matrix::Matrix()'?
  • 11 мая 2024 г. 16:30
Ответы на вопрос 2
Ошибка "нет подходящей функции для вызова" часто возникает из-за того, что компилятор не может найти подходящую функцию для вызова в определенном контексте. 

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

При добавлении строк в класс, запрещающих копирование и перемещение (например, операторы копирования и перемещения помечены как delete), компилятор может требовать явного определения конструктора по умолчанию, если ранее он был автоматически сгенерирован. 

Поэтому для исправления ошибки, указывающей на отсутствие функции 'Matrix::Matrix()', вам нужно явно объявить конструктор без параметров в вашем классе Matrix. Примерно так:

```cpp
class Matrix {
public:
    Matrix() = default; // Явное объявление конструктора по умолчанию
    Matrix(const Matrix& other) = delete; // Отключение конструктора копирования
    Matrix(Matrix&& other) = delete; // Отключение конструктора перемещения
    // Остальной код класса
};
``` 

Это позволит компилятору создать конструктор по умолчанию и избежать ошибки.
В строке Matrix matr; в main неявно вызывается конструктор без аргументов. Но ты определил только конструкторы перемещения/копирования - пустого у тебя нет.
Похожие вопросы