Имбирь - твой спиритический овощ. Войти !bnw Сегодня Клубы

В интернете говорят, что если ты хочешь завернуть forward declaration объект unique_ptr то для внешнего класса нужен ДЕСТРУКТОР.
Чо этой падле не нравится?

In file included from /usr/include/c++/4.9/memory:81:0,
                 from meshedobject.hpp:5,
                 from render.cpp:13:
/usr/include/c++/4.9/bits/unique_ptr.h: In instantiation of ‘void std::default_delete<_Tp>::operator()(_Tp*) const [with _Tp = MOImpl]’:
/usr/include/c++/4.9/bits/unique_ptr.h:236:16:   required from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = MOImpl; _Dp = std::default_delete<MOImpl>]’
meshedobject.hpp:20:21:   required from here
/usr/include/c++/4.9/bits/unique_ptr.h:74:22: error: invalid application of ‘sizeof’ to incomplete type ‘MOImpl’
  static_assert(sizeof(_Tp)>0,
#ifndef MESHEDOBJECT_HPP
#define MESHEDOBJECT_HPP

#include <string>
#include <memory>

#include "scene.hpp"
#include "object.hpp"

struct MOImpl;

class MeshedObject: public Object  {
    std::unique_ptr<MOImpl> impl;

    public:
    void render(Scene *scene);
    void init(std::string name, const char *mesh_file, const char *texture_file, const char *vsKey, const char *fsKey);
    void setPosition(float x, float y, float z);

    ~MeshedObject() {}
    // string getName();
};

#endif
#4X158G / @ninesigns / 3652 дня назад

у тебя impl должно в initializer list оперделяться вроде, а я ни одного конструктора что-то не вижу
#4X158G/0AI / @kerrigan / 3652 дня назад
std::unique_ptr срочно-срочно нужно при вызове деструтора знать размер MOImpl. Убери его (деструктор) нахуй (там где виден MOImpl). // ~MeshedObject() = default;
#4X158G/D2O / @kuzy000 / 3652 дня назад

@kerrigan не должно

#4X158G/TJJ / @ninesigns --> #4X158G/0AI / 3652 дня назад

@kuzy000 это какой-то новый плюсоблядский синтаксис?

#4X158G/FSQ / @ninesigns --> #4X158G/D2O / 3652 дня назад

@kuzy000 ничего не поменялось.

class MeshedObject: public Object  {
    std::unique_ptr<MOImpl> impl;

    public:
    void render(Scene *scene);
    void init(std::string name, const char *mesh_file, const char *texture_file, const char *vsKey, const char *fsKey);
    void setPosition(float x, float y, float z);

    ~MeshedObject() = default;
    // string getName();
};

/usr/include/c++/4.9/bits/unique_ptr.h:74:22: error: invalid application of ‘sizeof’ to incomplete type ‘MOImpl’

#4X158G/CO8 / @ninesigns --> #4X158G/D2O / 3652 дня назад
#4X158G/CAG / @kuzy000 --> #4X158G/CO8 / 3652 дня назад

@kuzy000 определил конструкторы в cpp файле, все норм.
походу ебаные шаблоны интсанцировались в хедере, где тип impl неполный.

#4X158G/UOQ / @ninesigns --> #4X158G/CAG / 3652 дня назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.