2013-06-14 4 views
1

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

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 конструкторы не считаются для копирования инициализации (форма инициализации, которая использует = знак).

+0

вы быстро, как все выходите. Я думал, что ты на тебе. ЛОЛ. –

+0

@TylerJandreau: lol, всего несколько секунд, вы выиграете следующий;) –

+0

У меня есть доступ только к файлу заголовка, означает ли это, что его реализация в объектном файле отсутствует? – user2487364

0

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

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

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