#c #class #initializer-list
#c #класс #список инициализаторов
Вопрос:
Я пытаюсь написать список инициализации для моего 2-го конструктора, но я не знаю, с чего начать.
#ifndef ASTRING_H
#define ASTRING_H value
#include "stdlib.h"
#include "string.h"
#include <iostream>
using namespace std;
class AString {
private:
char* data;
int size;
public:
// Default constructor
AString () : data(''), size(0){};
// Copy from cstring
AString (const char*); // <- this is the constructor I'm having issues
// writing an initialization list for
};
#endif
Комментарии:
1. «Я не знаю, с чего начать» — это не описание проблемы, и ни «это конструктор, с которым у меня проблемы», особенно когда он скрыт в коде. На вопрос в вашем названии легко ответить экспериментально. С вашей стороны.
Ответ №1:
Проблема в том, что семантически a const char*
отличается от a char*
. Первый не позволяет изменять указанные данные, что разрешено для последнего.
Поскольку переменная-член является a char*
по дизайну, подразумевается, что она должна быть изменяемой. Вы можете настроить свой код так, чтобы скопировать переданные данные в переменную-член или просто забыть обо всем и использовать std::string
:
class AString {
private:
std::string data;
public:
AString(const char* data) : data(data) { }
};
Чтобы скопировать данные, вам нужно будет получить длину strlen
и запомнить delete []
в деструкторе.