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 шт):
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);//конструктор копирования
иначе очередной вопрос "почему у меня все не работает" неизбежен...