2013-03-08 3 views
0
class A 
{ 
public: 
    virtual ~A() {} 

    virtual Process(cv::Mat& img) {} 
} ; 

class B : public A 
{ 
public: 

    Process(cv::Mat& inputimage) 
    { 

     if (img.empty()) 
     { 
      img = inputimage.clone(); 
      return; 
     } 

     else 
      cv::imshow ("image", img); 
    } 
private: 

     cv::Mat img; 

    }; 

Этот img всегда остается пустым при возникновении условия. Путь, я использую этот код в моем основном является:переменная, не сохраняющая данные в производном классе

псевдокоде

int main()` 
{ 
    A* a; 

    a = new B; 

    while(avi.notempty() 
    { 
     a.Process(nextFrame); 
    } 
} 

код не является полным, но, по существу, проблема заключается в том, что переменный не хранятся каким-то образом.

+0

Пожалуйста, отредактируйте ваш код. Поскольку это даже не ясно, что это должно делать: это, если ветвь смешивается с 'private:' .. странно! –

+0

если вы сделаете процесс чисто виртуальным, по крайней мере, вы можете отслеживать, если B реализует его правильно, 'класса А { общественность: виртуального ~ A) {} виртуального процесс ((резюме :: Mat & IMG) = 0 ; }; ' – berak

+0

еще раз, пожалуйста, отредактируйте свой код, там будет много ошибок. Процессу нужен тип возврата, a-> Процесс вместо a.Process и т. Д., Не будь таким неряшливым! – berak

ответ

0

проблема была решена, когда я изменил

img.copyTo(img2);

в

img2 = img.clone();

Спасибо!

Смежные вопросы