Создайте файл cxx для файла hxx в C ++ - PullRequest
1 голос
/ 22 февраля 2012

У меня есть файл GetL.hxx

#ifndef GetL_included
#define GetL_included
#include <iostream>
using namespace std;
class GetL
{
 public:
    virtual int getWidth();
};
#endif //GetL_include

Здесь класс GetL содержит только одну виртуальную функцию и, следовательно, является абстрактным классом. Как я могу создать файл .cxx для этого файла .hxx?

Ответы [ 2 ]

4 голосов
/ 22 февраля 2012

Это не абстрактный класс. Абстрактный класс содержит чисто виртуальную функцию. Например, если вы хотите сделать свой класс абстрактным, вы можете поместить virtual int getWidth() = 0;, что заставит функцию getWidth() быть определенной в производном классе.

Вероятно, также стоит упомянуть, что не стоит помещать операторы using в заголовочный файл. Это излишне загрязняет текущее пространство имен и может привести к конфликтам имен.

2 голосов
/ 22 февраля 2012

Если ваш класс должен быть абстрактным, вы должны объявить getWidth() абстрактным.

Вот так virtual int getWidth() = 0;. Это делает функцию чисто виртуальной, что является обязательным условием для того, чтобы класс был абстрактным.

Тогда нет необходимости создавать файл .cxx, так как нет реализации, которая бы подходила для вашего полностью абстрактного класса.

Только если у вас есть больше методов, из которых не все являются чисто виртуальными, вам потребуется создать файл реализации. Пока класс состоит только из чисто виртуальных функций, вам не нужно создавать реализацию.

Редактировать: Чтобы обеспечить реализацию, создайте новый файл с именем GetL.cxx

#include "GetL.hxx"

int GetL::getWidth() {
    // Insert implementation here
}

В зависимости от вашей IDE и настроек проекта вам может понадобиться #include "stdafx.h" в верхней части этого файла реализации. Обратите внимание, что если вы предоставляете реализацию, ваш класс больше не является абстрактным, и вы не должны использовать = 0 в объявлении вашего метода.

...