Указатель на объект с явным конструктором

Я пытаюсь сделать что-то вроде этого, и я получаю сообщение об ошибке:

class A {
public:
explicit A();
}

A * a = new A(); //results in:  undefined reference to A()

Я также попробовал:

A * a = A(); //results in cannot convert A to A * in assignment

Есть ли способ сделать это? Я был бы очень признателен за помощь.

1

Решение

В первом случае проблема не связана с тем, что конструктор explicit, но с тем, что вы это объявили, а не определили. То, что вы получаете, является ошибкой от линкер, не из компилятора. Попробуй это:

 class A {
public:
explicit A() { /* Or anything more meaningful than just doing nothing */ }
};

Во втором случае это не сработает. Во-первых, потому что вы пытаетесь инициализировать указатель (т.е. переменную типа A*) из объекта типа A, Во-вторых, потому что даже если вы сделали немного более значимым:

A a = A();

Это не скомпилируется, потому что explicit конструкторы не рассматриваются для копия инициализация (форма инициализации, которая использует = знак).

1

Другие решения

Вы не предоставляете тело конструктора. Пытаться:

class A {
public:
explicit A() {}
}

explicit Ключевое слово просто означает, что оно предотвращает преобразования типов, о чем говорит вторая ошибка.

0

По вопросам рекламы [email protected]