Спокойный Создатель: “используемая подставляемая функция, но никогда определяемая” – почему?

На самом деле существует способ получить это поведение. "Каждая проблема в программном обеспечении может быть решена с уровнем абстракции".

/* Disclaimer: I haven't done C++ in many months now, there might be a few syntax errors here and there. */
class parent
{
public:
     parent( ) { /* nothing interesting here. */ };
protected:
     struct parent_virtual
     {
         virtual void do_something( ) { cout << "in parent."; }
     };

     parent( const parent_virtual& obj )
     {
          obj.do_something( );
     }
};

class child : public parent
{
protected:
     struct child_virtual : public parent_virtual
     {
         void do_something( ) { cout << "in child."; }
     };
public:
      child( ) : parent( child_virtual( ) ) { }
};
14
задан Tony the Pony 14 September 2009 в 14:11
поделиться

2 ответа

Хорошо , Я не знаю точной проблемы, но для начала:

  • Встроенные методы должны быть реализованы в файле заголовка. Компилятору необходимо знать код, чтобы на самом деле inline it.
  • Также использование ключевого слова inline в объявлении класса не имеет никакого эффекта. Но это тоже не повредит.

См. Также: c ++ faq lite

30
ответ дан 1 December 2019 в 07:39
поделиться

In addition to what Johan said, you cannot have a separate definition and declaration for the function even if both are in the same header file. This holds true especially for member functions of classes. The function code should be of the form:

class someClass
{
void someFunc()
{ ... }
}
// This will make the function inline even w/o the explicit 'inline'

And NOT of the form

class someClass
{
public:
     void someFunc();
}

void someClass::someFunc()
{ ... }
1
ответ дан 1 December 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: