Там библиотеки должны выполнить xslt преобразование в erlang?

Не включайте header.h в ver1.h или ver2.h, но в соответствующие файлы .cpp: FuncPoint является указателем, поэтому вы можете использовать предварительные объявления. Поскольку оба ver1.h и ver2.h будут включены, вам нужно будет переименовать его, однако, там, где оно открыто (в файлах .cpp вы также сможете использовать оригинал FuncPoint, поскольку вы включите там только одно его определение) :

//ver1.h
#include "ver.h"
struct struct_type_a;
typedef void (*FuncPoint_a)(struct_type_a); 
class ver1 : public ver
{
    public:
        FuncPoint_a f;
        static ver1 *create();
};

Кроме того, создание полиморфных объектов должно требоваться к методам, реализованным в файлах .cpp, в статическом методе create().

Следуя вашему коду, он станет:

//something.cpp
#include "ver.h"    
#include "ver1.h"
#include "ver2.h"
ver* somefunc()
{
    if (some_condition)
        return ver1::create();
    else
        return ver2::create();
}

Таким образом, два коллидирующих заголовка никогда не будут включены в один и тот же файл.

Я добавил включение ver.h в ver1.hver2.h), потому что это источник, использующий его. Включение этого в something.cpp только не правильно (ver1 и ver2 нуждаются в этом) - но не связано с текущей проблемой.

7
задан Blair Conrad 29 December 2008 в 12:34
поделиться