2010-09-15 4 views
0

У меня есть код,Как правильно лить объект?

class foo : public bar 
{ 
public: 
    foo(){}; 
    ~foo(){}; 
}; 

class wu 
{ 
public: 
    wu(const bar& Bar) : 
     m_bar(Bar) 
    {}; 
    ~wu(){}; 

private: 
    bar m_bar; 

}; 

int main() 
{ 
    foo tmpFoo; 
    wu tmpWu(tmpFoo); 
} 

Теперь моя проблема, приведенный выше код не скомпилируется, и сообщение об ошибке «Ошибка: переменная У tmpWu имеет инициализатор, но неполный тип».

Означает ли это, что я должен отличить объект tmpFoo от класса bar?

Прошу совета.

Спасибо.

+1

Это полный код? Это невозможно компилировать без определения «bar». –

+0

Вы также получаете сообщение об ошибке с отредактированной частью кода? (предполагается, что класс 'bar' уже определен) – Naveen

+0

да, это не полный или фактический код, но та же логика. – domlao

ответ

5

Вы должны использовать синтаксис m_bar(Bar) вместо m_bar = Bar в конструкторе класса wu. Также удалите фигурные скобки из объявления переменной tmpFoo, иначе вы будете объявлять функцию, которая возвращает объект foo и не получает никаких аргументов.


После вашего редактирования: Я попробовал этот код, и проблема это дало в том, что bar класс был не определен. В вашем случае компилятор дал ошибку «неполного типа»; это означает, что где-то в включаемый файл (или в том же файле), класс bar объявлен следующим образом:

class bar; 

но никогда не определяется его содержание.

+0

Спасибо, я только что отредактировал. – domlao

+0

Большое спасибо, но, пожалуйста, предположите, что бар был определен. – domlao

+2

@sasayins: Если 'bar' определяется как' class bar {}; 'он строит отлично ... –

4

добавления

class bar {}; 

код работает для меня. Я что-то упускаю?

Смежные вопросы