C ++ Список инициализации для ссылочных переменных - PullRequest
2 голосов
/ 15 декабря 2011

Я пытаюсь инициализировать эталонный объект через список инициализации в конструкторе класса, и мне потребуются ваши входные данные о том, почему я не могу инициализировать его следующим образом.Разве мне не разрешено инициализировать ссылку следующим образом?

class ObjectA
{

private:
    char* _nameA; 
    int _velocityA;

public:
        ObjectA(char* name, int velocity)
        {
            name = name;
            _velocityA = velocity;
        }
};

В следующем списке инициализации я получаю сообщение об ошибке, в котором говорится ссылка типа "ObjectA &" (не квалифицированная как const)невозможно инициализировать значением типа "char *" Почему именно я получаю эту ошибку?и что я делаю не так?

class ObjectB
{

private:
    ObjectA& objA;

public:
        ObjectB(char* engName, int _velocityA):objA(engName, _velocityA)
        {
        }
};

Ответы [ 2 ]

3 голосов
/ 15 декабря 2011

Проблема в том, что вы пытались инициализировать ссылку objA так же, как при создании объекта.

ObjectB(char* engName, int _velocityA):objA(engName, _velocityA)
    {
    }

Помните, objA - это ссылка, а не указатель или переменная, поэтому objA(engName, _velocityA) вызовет конструктор ObjectA.

Конструктор ObjectB должен принять объект ObjectA в качестве параметра, чтобы ссылка objA могла ссылаться.

class ObjectB
{

private:
ObjectA& objA;

public:
    ObjectB(ObjectA & a):objA(a)
    {
    }
};

int main()
{
    ObjectA a("hello", 10);
    ObjectB *b = new ObjectB(a) ;

}
3 голосов
/ 15 декабря 2011

То, что вы пытаетесь сделать здесь, не имеет никакого смысла. Вы пытаетесь инициализировать ссылку с вновь созданным объектом. Ссылка должна указывать на существующий объект. Если у вас его нет, ссылка может быть не той, что вы хотите.

См. Этот вопрос для получения дополнительной информации: Для инициализации ссылочного элемента требуется временная переменная C ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...