Ошибка e0289 c

Source.cpp

#include <iostream>
#include "String.h"
using namespace std;

int main(){
cout << "Hello World!\n";

String str("HELLO");

cout << str;

return 0;
}

String.h

#pragma once
#include <iostream>

class String
{
private:
    char* str;
    int length;
public:
    String();
    String(char* str);
    String(const String& other);
    String(String&& other) noexcept;
    ~String();
    String& operator= (const String& other);
    String& operator+ (const String& other);
    char& operator[] (size_t i) const;
    friend bool operator== (const String& str, const String& other);
    friend bool operator!= (const String& str, const String& other);
    friend ostream& operator<<(ostream& out, const String& other)
    {
        return (out << other.str);
    }
    friend istream& operator>>(ostream& in, const String& other)
    {
        return (in >> other.str);
    }
    size_t Length();
    void show();
};

String.cpp

#include "String.h"
#include <iostream>
using namespace std;

String::String()
{
    str = nullptr;
    length = 0;
}

String::String(char* str)
{
    length = strlen(str);
    this->str = new char[length + 1];
    for (int i = 0; i < length; i++)
        this->str[i] = str[i];

    this->str[length] = '\0';
}

String::String(const String& other)
{
    if (str != nullptr)
        delete[] str;
    length = strlen(other.str);
    str = new char[length + 1];
    for (int i = 0; i < length; i++)
        str[i] = other.str[i];

    str[length] = '\0';
}

String::String(String&& other) noexcept
{
    length = other.length;
    str = other.str;
    other.str = nullptr;
}

String::~String()
{
    delete[] str;
}

void String::show()
{
    cout << str;
}

size_t String::Length() 
{
    return length;
}

bool operator== (const String& str, const String& other)
{
    if (str.length != other.length)
    {
        return false;
    }
    for (int i = 0; i < str.length; i++)
    {
        if (str[i] != other.str[i])
            return false;
    }

    return true;
}

bool operator!= (const String& str, const String& other)
{
    return !(operator==(str, other));
}

char& String::operator[] (size_t i) const
{
    return str[i];
}

String& String::operator= (const String& other)
{
    if (this->str != nullptr)
        delete[] str;
    length = strlen(other.str);
    this->str = new char[length + 1];
    for (int i = 0; i < length; i++)
        this->str[i] = other.str[i];

    this->str[length] = '\0';

    return *this;
}
String& String::operator+ (const String& other)
{
    String newStr;
    length = strlen(str) + strlen(other.str);
    newStr.str = new char[length + 1];

    int i = 0;
    for (i; i < strlen(str); i++)
        newStr.str[i] = str[i];
    for (int j = 0; j < strlen(other.str); i++, j++)
        newStr.str[i] = other.str[j];

    newStr[length] = '\0';

    return newStr;
}

Скрины с описанием ошибки:

1
1
2
2

задан 27 ноя 2019 в 19:38

lunary's user avatar

9

Вот здесь

String str("HELLO");

"HELLO" приводится к типу const char *. А конструктора такого у вас нет!

Но вот скажите — в конструкторе

String::String(char* str)
{
    length = strlen(str);
    this->str = new char[length + 1];
    for (int i = 0; i < length; i++)
        this->str[i] = str[i];

    this->str[length] = '\0';
}

вы разве меняете строку, на которую указывает аргумент str? Тогда по какой причине вы объявляете его как char* str, а не как const char* str, каковым он и является? объявите его как

String::String(const char* str)

Сразу станет легче жить :) Не экономьте на const!

Вот, например:

size_t String::Length() 
{
    return length;
}

Скажите, эта функция-член меняет объект String? Нет? Так почему вы не объявите ее как константную?

size_t String::Length() const
{
    return length;
}

ответ дан 27 ноя 2019 в 19:44

Harry's user avatar

HarryHarry

217k15 золотых знаков117 серебряных знаков229 бронзовых знаков

4

Строковый литерал "HELLO" в языке C++ имеет тип const char [6]. Он также может быть неявно преобразован к типу const char *.

У вашего класса нет конструкторов, способных принимать аргументы типа const char [6] или const char *. Об этом вам и говорит компилятор.

ответ дан 27 ноя 2019 в 19:45

AnT stands with Russia's user avatar

Студворк — интернет-сервис помощи студентам

Из книги: https://www.rulit.me/books/c-b… 8-200.html
Ошибка (активно) E0289 отсутствуют экземпляры конструктора «myclass<Type1, Type2>::myclass [с Type1=char, Type2=char *]», соответствующие списку аргументов

// Здесь используется два обобщенных типа данных в определении класса.
#

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
include <iostream>
using namespace std;
 
template <class Type1, class Type2>
class myclass {
    Type1 i;
    Type2 j;
public:
    myclass(Type1 a, Type2 b) { i = a; j = b; }
    void show() { cout << i << ' ' << j << '\n'; }
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    myclass<int, double> ob1(10, 0.23);
    myclass<char, char *> ob2('x', "Это тест");
    ob1.show(); // отображение int- и double-значений
    ob2.show(); // отображение значений типа char и char *
    system("pause");
    return 0;
}

Source.cpp

#include <iostream>
#include "String.h"
using namespace std;

int main(){
cout << "Hello World!n";

String str("HELLO");

cout << str;

return 0;
}

String.h

#pragma once
#include <iostream>

class String
{
private:
    char* str;
    int length;
public:
    String();
    String(char* str);
    String(const String& other);
    String(String&& other) noexcept;
    ~String();
    String& operator= (const String& other);
    String& operator+ (const String& other);
    char& operator[] (size_t i) const;
    friend bool operator== (const String& str, const String& other);
    friend bool operator!= (const String& str, const String& other);
    friend ostream& operator<<(ostream& out, const String& other)
    {
        return (out << other.str);
    }
    friend istream& operator>>(ostream& in, const String& other)
    {
        return (in >> other.str);
    }
    size_t Length();
    void show();
};

String.cpp

#include "String.h"
#include <iostream>
using namespace std;

String::String()
{
    str = nullptr;
    length = 0;
}

String::String(char* str)
{
    length = strlen(str);
    this->str = new char[length + 1];
    for (int i = 0; i < length; i++)
        this->str[i] = str[i];

    this->str[length] = '';
}

String::String(const String& other)
{
    if (str != nullptr)
        delete[] str;
    length = strlen(other.str);
    str = new char[length + 1];
    for (int i = 0; i < length; i++)
        str[i] = other.str[i];

    str[length] = '';
}

String::String(String&& other) noexcept
{
    length = other.length;
    str = other.str;
    other.str = nullptr;
}

String::~String()
{
    delete[] str;
}

void String::show()
{
    cout << str;
}

size_t String::Length() 
{
    return length;
}

bool operator== (const String& str, const String& other)
{
    if (str.length != other.length)
    {
        return false;
    }
    for (int i = 0; i < str.length; i++)
    {
        if (str[i] != other.str[i])
            return false;
    }

    return true;
}

bool operator!= (const String& str, const String& other)
{
    return !(operator==(str, other));
}

char& String::operator[] (size_t i) const
{
    return str[i];
}

String& String::operator= (const String& other)
{
    if (this->str != nullptr)
        delete[] str;
    length = strlen(other.str);
    this->str = new char[length + 1];
    for (int i = 0; i < length; i++)
        this->str[i] = other.str[i];

    this->str[length] = '';

    return *this;
}
String& String::operator+ (const String& other)
{
    String newStr;
    length = strlen(str) + strlen(other.str);
    newStr.str = new char[length + 1];

    int i = 0;
    for (i; i < strlen(str); i++)
        newStr.str[i] = str[i];
    for (int j = 0; j < strlen(other.str); i++, j++)
        newStr.str[i] = other.str[j];

    newStr[length] = '';

    return newStr;
}

Скрины с описанием ошибки:

1
1
2
2

задан 27 ноя 2019 в 19:38

lunary's user avatar

9

Вот здесь

String str("HELLO");

"HELLO" приводится к типу const char *. А конструктора такого у вас нет!

Но вот скажите — в конструкторе

String::String(char* str)
{
    length = strlen(str);
    this->str = new char[length + 1];
    for (int i = 0; i < length; i++)
        this->str[i] = str[i];

    this->str[length] = '';
}

вы разве меняете строку, на которую указывает аргумент str? Тогда по какой причине вы объявляете его как char* str, а не как const char* str, каковым он и является? объявите его как

String::String(const char* str)

Сразу станет легче жить :) Не экономьте на const!

Вот, например:

size_t String::Length() 
{
    return length;
}

Скажите, эта функция-член меняет объект String? Нет? Так почему вы не объявите ее как константную?

size_t String::Length() const
{
    return length;
}

ответ дан 27 ноя 2019 в 19:44

Harry's user avatar

HarryHarry

215k15 золотых знаков117 серебряных знаков228 бронзовых знаков

4

Строковый литерал "HELLO" в языке C++ имеет тип const char [6]. Он также может быть неявно преобразован к типу const char *.

У вашего класса нет конструкторов, способных принимать аргументы типа const char [6] или const char *. Об этом вам и говорит компилятор.

ответ дан 27 ноя 2019 в 19:45

AnT stands with Russia's user avatar

Студворк — интернет-сервис помощи студентам

Из книги: https://www.rulit.me/books/c-b… 8-200.html
Ошибка (активно) E0289 отсутствуют экземпляры конструктора «myclass<Type1, Type2>::myclass [с Type1=char, Type2=char *]», соответствующие списку аргументов

// Здесь используется два обобщенных типа данных в определении класса.
#

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
include <iostream>
using namespace std;
 
template <class Type1, class Type2>
class myclass {
    Type1 i;
    Type2 j;
public:
    myclass(Type1 a, Type2 b) { i = a; j = b; }
    void show() { cout << i << ' ' << j << 'n'; }
};
 
int main()
{
    setlocale(LC_ALL, "rus");
    myclass<int, double> ob1(10, 0.23);
    myclass<char, char *> ob2('x', "Это тест");
    ob1.show(); // отображение int- и double-значений
    ob2.show(); // отображение значений типа char и char *
    system("pause");
    return 0;
}

You have not defined a constructor for your Movie class that takes those values as parameters.

If you’re trying to just initialize the object by members, use {} instead of ():

Movie movie1 = Movie{"Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89};

or just

Movie movie1 = {"Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89};

Понятия не имею, почему я получаю эту ошибку в этой базовой программе. Я даже проверил код и поискал ответы на этом сайте и в Google. Но я не понимаю, как исправить свою ошибку.

ССЫЛКИ:
E0289: нет экземпляра конструктора «Phone :: Phone» соответствует списку аргументов?
ни один экземпляр конструктора не соответствует списку аргументов
Ошибка: ни один экземпляр конструктора не соответствует списку аргументов

Вот мой код:

#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
#include "trimdecimal.h"

using namespace std;

class Movie {
    public:
        string title;
        string director;
        string mainCast1;
        string mainCast2;
        int yearReleased;
        bool isAHit;
        int publicLikePercentage;
};

int main()
{
    Movie movie1 = Movie("Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89);
}

И я получаю эту ошибку, как я сказал в заголовке:

E0289     no instance of constructor "Movie::Movie" matches the argument list

Я написал это в Visual Studio 2019

Какие-нибудь решения? Я буду искренне признателен за любые исправления, но, пожалуйста, будьте конкретны и объясните мне, как решить эту проблему, как если бы вы поступили с ребенком.

1 ответ

Лучший ответ

Вы не определили конструктор для вашего класса Movie, который принимает эти значения в качестве параметров.

Если вы пытаетесь просто инициализировать объект по членам, используйте {} вместо ():

Movie movie1 = Movie{"Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89};

Или просто

Movie movie1 = {"Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89};


0

jkb
12 Дек 2019 в 01:04

#include <iostream>
#include <string_view>
#include <string>
std::string_view LoL()
{
    std::string str{};
    std::getline(std::cin >> std::ws, str);
    return str;
}
int main()
{
    std::string_view x{LoL};
    std::cout << x;
    return 0;
}

не компилируется пишет

Ошибка (активно) E0289 отсутствуют экземпляры конструктора «std::basic_string_view<_Elem, _Traits>::basic_string_view [с _Elem=char, _Traits=std::char_traits]», соответствующие списку аргументов getline E:c++getlineSource.cpp 12

что делать

Ответы (2 шт):

В строке

std::string_view x{LoL};

вы передаете в качестве аргумента адрес функции LoL, а не результат ее вызова.

std::string_view x{LoL()};

Просто интересно, сколько секунд вы пытались решить этот вопрос самостоятельно?

И еще —

std::string_view LoL()
{
    static std::string str{};

или

std::string LoL()
{
    std::string str{};
    std::getline(std::cin >> std::ws, str);
    return str;
}

int main()
{
    std::string lol = LoL();
    std::string_view x{lol};
    std::cout << x;
    return 0;
}

→ Ссылка

Понятия не имею, почему я получаю эту ошибку в этой базовой программе. Я даже проверил код и поискал ответы на этом сайте и в Google. Но я не понимаю, как исправить свою ошибку.

ССЫЛКИ:
E0289: нет экземпляра конструктора «Phone :: Phone» соответствует списку аргументов?
ни один экземпляр конструктора не соответствует списку аргументов
Ошибка: ни один экземпляр конструктора не соответствует списку аргументов

Вот мой код:

#include <iostream>
#include <cmath>
#include <string>
#include <iomanip>
#include "trimdecimal.h"

using namespace std;

class Movie {
    public:
        string title;
        string director;
        string mainCast1;
        string mainCast2;
        int yearReleased;
        bool isAHit;
        int publicLikePercentage;
};

int main()
{
    Movie movie1 = Movie("Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89);
}

И я получаю эту ошибку, как я сказал в заголовке:

E0289     no instance of constructor "Movie::Movie" matches the argument list

Я написал это в Visual Studio 2019

Какие-нибудь решения? Я буду искренне признателен за любые исправления, но, пожалуйста, будьте конкретны и объясните мне, как решить эту проблему, как если бы вы поступили с ребенком.

1 ответ

Лучший ответ

Вы не определили конструктор для вашего класса Movie, который принимает эти значения в качестве параметров.

Если вы пытаетесь просто инициализировать объект по членам, используйте {} вместо ():

Movie movie1 = Movie{"Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89};

Или просто

Movie movie1 = {"Fast & Furious Presents: Hobbs & Shaw", "David Leitch", "Dwayne Johnson", "Jason Statham", 2019, true, 89};


0

jkb
12 Дек 2019 в 01:04

Рассмотрим подробнее

  1. Техническое описание и расшифровка ошибки P0289
  2. Симптомы неисправности
  3. Причины возникновения ошибки
  4. Как устранить или сбросить код неисправности P0289
  5. Диагностика и решение проблем
  6. Проверка жгута проводов
  7. На каких автомобилях чаще встречается данная проблема
  8. Видео

Код ошибки P0289 звучит как «высокий уровень сигнала в цепи управления топливной форсунки 10-го цилиндра». Часто, в программах, работающих со сканером OBD-2, название может иметь английское написание «Cylinder 10 Injector Circuit High».

Этот диагностический код неисправности (DTC) является общим кодом трансмиссии. Ошибка P0289 считается общим кодом, поскольку применяется ко всем маркам и моделям транспортных средств. Хотя конкретные этапы ремонта могут несколько отличаться в зависимости от модели.

Код ошибки P0289 – высокий уровень сигнала в цепи управления топливной форсунки 10-го цилиндра

PCM обменивается информацией и подает команды топливным форсункам при помощи внутреннего переключателя, называемого «драйвером». Модуль управления контролирует каждую схему драйвера на наличие неисправностей.

Например, когда PCM дает команду «выключить» топливную форсунку, он ожидает увидеть высокое напряжение в цепи драйвера. И наоборот, когда топливная форсунка получает команду «включить» ожидается низкое напряжение в цепи драйвера.

Код P0289 означает, что модуль управления двигателем обнаружил высокий уровень сигнала в цепи топливной форсунки №10. Цепь топливной форсунки управляет топливными форсунками и определяет, сколько необходимо топлива и когда его распылять.

Когда топливная форсунка выходит из строя, она вызывает колебания сигнала. Это означает, что рабочие параметры двигателя меняются из-за смешанных параметров, поступающих в PCM.

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

Цилиндр с неисправной форсункой создает обедненную смесь, которая, в свою очередь, вызывает более высокую температуру головки цилиндров, что приводит к детонации. Датчик детонации обнаруживает детонацию и сигнализирует PCM, который реагирует замедлением времени. Теперь двигатель работает с перебоями, что в дополнение приводит к падению мощности.

Симптомы неисправности

Основным симптомом появления ошибки P0289 для водителя является подсветка MIL (индикатор неисправности). Также его называют Check engine или просто «горит чек».

Также они могут проявляться как:

  1. Загорится контрольная лампа «Check engine» на панели управления (код будет записан в память ECM как неисправность).
  2. Плавающие обороты, двигатель автомобиля может работать неустойчиво.
  3. Повышенный расход топлива.
  4. Двигатель глохнет либо плохо заводится.
  5. Дерганье/пропуски зажигания на холостом ходу или под нагрузкой.
  6. Плохой набор скорости.
  7. Черный дым из выхлопной трубы.

Степень серьезности ошибки P0289 выше среднего, следует проявлять осторожность. Так как у автомобиля могут возникнуть серьезные проблемы, потенциально влияющие на безопасность.

Причины возникновения ошибки

Код P0289 может означать, что произошла одна или несколько следующих проблем:

  • Обрыв или короткое замыкание проводов форсунки.
  • Забита топливная форсунка.
  • Полный выход форсунки из строя.
  • Жгут проводов периодически замыкается на компоненты под капотом.
  • Ослабленный или корродированный разъем.
  • Иногда причиной является неисправный модуль PCM.

Как устранить или сбросить код неисправности P0289

Некоторые предлагаемые шаги для устранения неполадок и исправления кода ошибки P0289:

  1. Считайте все сохраненные данные и коды ошибок с помощью сканера OBD-II.
  2. Очистите коды ошибок с памяти компьютера.
  3. Проведите тест-драйв автомобиля, чтобы выяснить, появляется ли ошибка P0289 снова.
  4. Визуально осмотрите топливные форсунки, а также соответствующие провода и соединители на наличие повреждений.
  5. Проверьте работу топливных форсунок.
  6. При необходимости проверить работу топливных форсунок на специальном стенде.
  7. Протестируйте модуль управления двигателем (ECM).

Диагностика и решение проблем

Начиная диагностику неисправности P0289 проверьте наличие напряжения аккумулятора (12 В) на проводе разъема форсунки. Если напряжение отсутствует, проверьте целостность цепи на массу, используя контрольную лампу. Подключенную к плюсу аккумуляторной батареи. Если она загорается, значит, в цепи подачи напряжения произошло короткое замыкание на массу.

Устраните короткое замыкание в цепи подачи напряжения и восстановите надлежащее напряжение аккумулятора. Не забудьте проверить предохранитель и заменить его при необходимости.

Одна форсунка может закоротить подачу напряжения от аккумулятора на все форсунки.

Если напряжение от аккумулятора подается на жгут проводов форсунок, следующим шагом будет включение светового индикатора для проверки работы драйвера форсунки. В жгут форсунки вместо топливной форсунки установите световой индикатор. Который будет быстро мигать при работе привода форсунки.

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

Помните, что топливная форсунка может нормально работать в холодном состоянии, но быть неисправной в горячем состоянии, или наоборот.

Проверка жгута проводов

Проверьте жгут проводов на предмет перетирания, а также разъем на предмет ослабленных контактов или сломанного замка. При необходимости отремонтируйте и проверьте, возвращается ли ошибка P0289.

Отсоедините разъем PCM и подключите к цепи драйвера топливной форсунки. Любое сопротивление означает наличие проблемы. Бесконечное сопротивление указывает на разрыв в цепи. Найдите и отремонтируйте, затем повторите попытку.

Если вы не можете найти никаких проблем с жгутом, но драйвер топливной форсунки не работает, проверьте питание и массу PCM. Если они в порядке, возможно, неисправен сам PCM.

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

На каких автомобилях чаще встречается данная проблема

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

  • Dodge
  • Ford
  • Volkswagen

С кодом неисправности Р0289 иногда можно встретить и другие ошибки. Наиболее часто встречаются следующие: P0262, P0265, P0268, P0271, P0274, P0277, P0280, P0283, P0286, P0292, P0295.

Видео

Понравилась статья? Поделить с друзьями:
  • Ошибка e028 omvl
  • Ошибка e02 робот пылесос
  • Ошибка e023 kobelco
  • Ошибка e02 на индукционной плите
  • Ошибка e0209 autodata как исправить