MyVector::MyVector(MyVector &)":невозможно преобразовать аргумент const char[6] в MyVector &"

Вот кусочек кода,прописала конструктор с параметром и конструктор копирования(для других функций),но компилятор видимо путает конструкторы и выдает такую ошибку MyVector::MyVector(MyVector &)":невозможно преобразовать аргумент const char[6] в MyVector &",те он почему-то думает,что для строки MyVector v("Hello") нужен конструктор копирования,подскажите,пожалуйста,что делать

#include <iostream>
using namespace std;

const int MAX_SIZE = 5;
class MyVector
{
public:
    MyVector(char* el, int maxsz);//конструктор с одним параметром
    MyVector( MyVector& v);//конструктор копирования
    ~MyVector()// деструктор
    {
        for (int i = 0; i < size; ++i)//освобождаем в цикле память под каждую строчку
        {
            delete[] pdata[i];
        }
        delete[] pdata;//освобождаем саму память

protected:
    int maxsize;// размер вектора
    int size;// количество элементов в векторе
    char ** pdata;
};


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

//создание конструктора с одним параметром (символьная строка)для создания мн-ва размером 1 и имеетзначения по умолчанию
MyVector::MyVector(char* el, int maxsz)
{
    maxsize = maxsz;//размер вектора равен переданному значению
    pdata = new char*[maxsz];//char **pdata указатель, содержащий адрес динамического массива элементов(строк).
    size = 1;//количество элементов в векторе
    pdata[0] = new char[strlen(el) + 1];//выделяем динамическую память под строку
    strcpy_s(pdata[0],strlen(el)+1, el);// копируем(куда,что)
}

MyVector::MyVector(MyVector& v)//конструктор копирования
{
    maxsize = v.maxsize;
    size = v.size;
    pdata = new char*[maxsize];//выделяем память под динамический массив
    for (int i = 0; i < size; ++i)//выделяем память под каждую строчку и копируем туда
    {
        pdata[i] = new char[strlen(v.pdata[i]) + 1];
        strcpy_s(pdata[i], strlen(v.pdata[i]) + 1, v.pdata[i]);
    }
}

#include <iostream>
#include "MyVector.h"
#include "MySet.h"
#include "MyVector.cpp"
//#include "MySet.cpp"
using namespace std;

int main()
{
    setlocale(0, "russian");

    MyVector v("Hello");
......
    retutn 0;
}

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

Автор решения: Harry
MyVector(char* el, int maxsz);//конструктор с одним параметром

Интересно, если я не ошибаюсь, считая до двух, то их тут два...

Итак, у вас два конструктора

MyVector(char* el, int maxsz);//конструктор с одним параметром
MyVector( MyVector& v);//конструктор копирования

Вы передаете один параметр

MyVector v("Hello");

Какой конструктор с одним параметром? только копирующий. Как преобразовать строку в MyVector для копирования? никак. О чем компилятор и сообщил.

Но это еще не все. Когда вы пишете

MyVector(char* el, int maxsz);//конструктор с одним параметром
MyVector( MyVector& v);//конструктор копирования

вы говорите компилятору - я буду менять передаваемые аргументы в конструкторе. Но разве это так?

А в результате вы не сможете вызвать даже

MyVector v("Hello",0);

потому что "Hello" - ни разу не char*! Это const char[6], который приводится к const char*, но не к char* (как же надоело это писать... уже наверняка больше десятка раз - но ежики все едят кактус...)

Сразу пишите

MyVector(const char* el, int maxsz);//конструктор с одним параметром
MyVector(const MyVector& v);//конструктор копирования

иначе очередной вопрос "почему у меня все не работает" неизбежен...

→ Ссылка