Что означает неопределенная ошибка времени выполнения символа при вызове конструктора для дополнения Mitsuba? - PullRequest
1 голос
/ 07 июля 2019

Я пытаюсь реализовать собственное дополнение для mitsuba, но когда я использую поле высоты, которое я определил в другом вызове функции (WaveBrdfAccel) в main.cpp, оно компилируется без проблем, но когда я пытаюсь визуализировать сцену, я получить сообщение об ошибке: неопределенный символ: _ZTVN7mitsuba11HeightfieldE

Что я делаю не так в вызове этого конструктора?

Я пытаюсь это сделать на Mitsuba версии 0.5.0 (Linux, 64 bit). Если я удаляю параметр heightfield из объявления WaveBrdfAccel, то эта ошибка не возникает, что наводит меня на мысль, что что-то не так в том, как я это называю, но я не могу понять это.

Вот мой файл main.cpp:

GPTWorkResultTest *spec;
                spec->SpectrumInit(); 

            GPTWorkResultEXR heightfieldImage(heightfieldFilename);
            Heightfield heightfield(&heightfieldImage, texelWidth, vertScale);
            Query query;
                query.mu_p = Vector2(mu_x, mu_y);
                query.sigma_p = sigma_p;
                query.lambda = lambda;

            WaveBrdfAccel waveBrdfAccel(&heightfield, diffModel); 

класс Heightfield и WaveBrdfAccel в waveBrdf.h:

class Heightfield {
public:
     explicit Heightfield() {}
     Heightfield(GPTWorkResultEXR *heightfieldImage, Float texelWidth = 1.0, Float vertScale = 1.0)
        : mHeightfieldImage(heightfieldImage), mTexelWidth(texelWidth), mVertScale(vertScale) {}
    GaborKernel g(int i, int j, Float F, Float lambda);

    Vector2 n(Float i, Float j);
public:
    GPTWorkResultEXR *mHeightfieldImage;
    Float mTexelWidth;      // in microns.
    Float mVertScale;
    MTS_DECLARE_CLASS()

};

class WaveBrdfAccel {
public:

explicit WaveBrdfAccel(Heightfield *heightfield, string method);

 comp queryIntegral(const Query &query, int layer, int xIndex, int yIndex);


MTS_DECLARE_CLASS()

и, наконец, включение в waveBrdf.cpp:

WaveBrdfAccel::WaveBrdfAccel(Heightfield *heightfield, string method) {
cout << "IT IS ACTUALLY running wave" << endl;
}


MTS_IMPLEMENT_CLASS(WaveBrdfAccel, false, WorkResult)

EDIT:

Я не совсем уверен, почему это так, но мне удалось это исправить, просто разделив определения классов на отдельные заголовочные файлы. Если кто-нибудь знает, почему это сработало, хотел бы знать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...