logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Błędy kompilacji w Microsoft Visual C++ .NET - ContEHMM, FaceBase, ImageBaseView

Skreczi 08 Gru 2007 21:33 2817 10
REKLAMA
  • #1 4567088
    Skreczi
    Poziom 10  
    Posty: 8
    Witam,

    Używam Microsoft Visual C++ .NET

    Link do plików z błędami:

    http://adamk1984.fm.interia.pl/projekt/ContEHMM.cpp
    http://adamk1984.fm.interia.pl/projekt/FaceBase.cpp
    http://adamk1984.fm.interia.pl/projekt/ImageBaseView.cpp

    Gdy próbuje skompilować program pojawiają mi się następujące błędy:

    Cytat:

    \PRO\OpenCV_new\HMMDemo\ImageBaseView.cpp(248): error C2668: 'sqrt' : ambiguous call to overloaded function
    \PRO\OpenCV_new\HMMDemo\FaceBase.cpp(1211): error C2440: '=' : cannot convert from 'CvEHMM' to 'CvEHMM *'
    \PRO\OpenCV_new\HMMDemo\FaceBase.cpp(1762): error C2440: '=' : cannot convert from 'CvEHMM' to 'CvEHMM *'
    \PRO\OpenCV_new\HMMDemo\FaceBase.cpp(1208): error C2440: 'initializing' : cannot convert from 'CvEHMM' to 'CvEHMM *'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2664: 'CvEHMM::CvEHMM(const CvEHMM &)' : cannot convert parameter 1 from 'CvEHMM *' to 'const CvEHMM &'


    Bardzo proszę o pomoc - niestety sam nie umiem sobie z tym poradzić.
  • REKLAMA
  • Pomocny post
    #2 4568130
    RhinoRace
    Poziom 17  
    Posty: 127
    Pomógł: 21
    Ocena: 1
    ok
    \PRO\OpenCV_new\HMMDemo\FaceBase.cpp(1211): error C2440: '=' : cannot convert from 'CvEHMM' to 'CvEHMM *'
    \PRO\OpenCV_new\HMMDemo\FaceBase.cpp(1762): error C2440: '=' : cannot convert from 'CvEHMM' to 'CvEHMM *'
    \PRO\OpenCV_new\HMMDemo\FaceBase.cpp(1208): error C2440: 'initializing' : cannot convert from 'CvEHMM' to 'CvEHMM *' 

    tutaj probujesz do zmiennej przypisac wskaznik na nia - a to jest operacja niedozwolona - zmien zmienne na wskazniki i wtedy przypisz ;)
    nie zalaczyles pliku ContEHMM.h ;) - zmaiast tego dales ContEHMM.cpp
    \PRO\OpenCV_new\HMMDemo\ImageBaseView.cpp(248): error C2668: 'sqrt' : ambiguous call to overloaded function 

    tutaj nie wie ktorej z przeciazonych funkcji uzyc - zamiast 2 daj 2.0 i bedzie po problemie ;)
  • #3 4568144
    Seba85
    Poziom 17  
    Posty: 110
    Pomógł: 24
    Jak chcesz, żeby Ci pomóc, to mógłbyś zacząć od wrzucenia całego projektu, razem z plikami nagłówkowymi, a nie jego części, widzę że ten kod skądś ściągnąłeś i pewnie jest poprawny. Upewnij się, że włączyłeś "use precompiled headers" w opcjach projektu, chociaż nie wiem, czy to coś pomoże.
  • REKLAMA
  • #4 4569482
    Skreczi
    Poziom 10  
    Posty: 8
    Projekt to OpenCV najnowsze pod którego chciałem podłączyć ich stare HMMDemo.

    HMMDemo było napisane pod OpenCV Beta 3 oraz 3.1 Wziąłem więc stamtąd źródło tego i próbowałem skompilować pod najnowszym OpenCV. Potrzeba było skopiować jeszcze camera.h oraz umieścić includy do biblioteki cvaux

    oto linki do projektów w oryginale:
    http://sourceforge.net/project/showfiles.php?group_id=22870&package_id=16937

    pod tym adresem można ściągnąć OpenCV 1.0 oraz OpenCV beta 3.0 praz 3.1 Doradzam również zmienić kodowanie na Unicode (w properties projektów)

    niestety całość, po spakowaniu, zajmuje 51 mega więc to jedyna wersja jaka jestem w stanie dostarczyć. Mogę natomiast wrzucić samo to co zrobiłem z tym programem z OpenCV beta 3.1 Może to coś pomoże.

    EDIT dla Rhino
    Dziękuje, i przepraszam za pomyłkę - tutaj jest właściwy link :)

    http://adamk1984.fm.interia.pl/projekt/ContEHMM.h
    Załączniki:
    • HMMDemo.rar (386.81 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #5 4571494
    Skreczi
    Poziom 10  
    Posty: 8
    podejrzewam, że to ten kawałek kodu sprawia problemy:

    
    #if !defined(AFX_CONTEHMM_H__A078F09B_40E3_421A_8422_C4209707657A__INCLUDED_)
    #define AFX_CONTEHMM_H__A078F09B_40E3_421A_8422_C4209707657A__INCLUDED_
    
    #if _MSC_VER > 1000
    #pragma once
    #endif // _MSC_VER > 1000
    
    #include "CV.h"
    #include <cvaux.h>
    
    class CContEHMM  
    {
    public:
    	BOOL Release();
    	CContEHMM();
    	virtual ~CContEHMM(); 
    
        bool CreateHMM( int* num_states, int* num_mix, int vect_size ); 
    	
    	int GetVectSize() { return m_vectSize; };
    	
     //   IppiEHMM* GetIppiEHMM() { return m_hmm; };
    	CvEHMM GetIppiEHMM() {
    		return m_hmm;
    	};
     
    
        bool Save( const char* filename );
        bool Load( const char* filename );
    
    protected:
        
    	//IppiEHMM* m_hmm;
    	
    	CvEHMM* m_hmm;
    
        int m_vectSize;
    
        
    };
    
    #endif // !defined(AFX_CONTEHMM_H__A078F09B_40E3_421A_8422_C4209707657A__INCLUDED_)
    


    Jakieś sugestie? Spostrzeżenia?

    EDIT
    \PRO\OpenCV_new\HMMDemo\ContEHMM.h(67): error C2553: no legal conversion of return value to return type 'CvEHMM'

    Bardzo możliwe iż ten błąd wskazuje, iż coś z powyższego kodu kłóci się z czymś z tego pliku, do którego podaje link poniżej. Będę wdzięczny za pomoc (około 126 linii jest konstruktor który chyba się kłóci z kodem powyżej).

    Link do cvaux.h
    http://adamk1984.fm.interia.pl/projekt/cvaux.h
  • REKLAMA
  • #6 4571758
    RhinoRace
    Poziom 17  
    Posty: 127
    Pomógł: 21
    Ocena: 1
    w klasie masz drobny blad ;)
    CvEHMM GetIppiEHMM() {
    		return m_hmm;
    	};
    
    CvEHMM* m_hmm;

    wewnatrz klasy masz wskaznik na typ CvEHMM, w naglowku funkcji masz zwracany obiekt tego typu i w jej ciele probujesz zrobic konwersje ze wskaznika na obiekt - i nic dziwnego kompilator szaleje, skoro nie ma pojecia jak tej konwersji dokonac ;)
    jest kilka sposobow naprawy w zaleznosci co chiales uzyskac
    - zmiana wewnetrznego wskaznika na typ
    CvEHMM GetIppiEHMM() {
    		return m_hmm;
    	};
    
    CvEHMM m_hmm;

    - zmiana zwracanego przez funkcje typu
    CvEHMM* GetIppiEHMM() {
    		return m_hmm;
    	};
    
    CvEHMM* m_hmm;

    - zmiana w ciele funkcji
    CvEHMM GetIppiEHMM() {
    		return *m_hmm;
    	};
    
    CvEHMM* m_hmm;

    sam mosisz zdecydowac co w twoim programie najlepiej sie sprawdzi :)
  • #7 4572134
    Seba85
    Poziom 17  
    Posty: 110
    Pomógł: 24
    RhinoRace ma rację, tylko zastanawia mnie jedno: po co w ogóle zmieniałeś ten fragment kodu?

    	CvEHMM* GetIppiEHMM() {
    		return m_hmm;
    	};


    Przecież w oryginalnej wersji tak właśnie było...
  • REKLAMA
  • #8 4572758
    Skreczi
    Poziom 10  
    Posty: 8
    Rhino - ponownie dziękuje :)

    Nie było Seba - tego kawałka nie ruszałem.
  • #10 4572900
    Skreczi
    Poziom 10  
    Posty: 8
    W takim razie źle cię zrozumiałem Seba - przepraszam.

    Zmieniłem go gdyż z jakiegoś powodu zlikwidowało to jakieś 5 błędów wykazanych przez kompilator :/ Nie wiem czemu kompilator tego nie "łykał" ale skoro wyszło in-plus to ja się z nim nie kłócę... :D
  • #11 4573424
    Seba85
    Poziom 17  
    Posty: 110
    Pomógł: 24
    Czasami kompilator przy napotkaniu jakichś poważniejszych błędów przerywa kompilacje, może dlatego nie łapało tych starych błędów.

Podsumowanie tematu

✨ Problem dotyczy błędów kompilacji w Microsoft Visual C++ .NET podczas próby kompilacji projektu opartego na OpenCV, w szczególności modułów ContEHMM, FaceBase oraz ImageBaseView. Główne błędy wynikają z niezgodności typów, m.in. próby przypisania obiektu typu CvEHMM do wskaźnika CvEHMM*, co jest niedozwolone. Wskazano, że w klasie CContEHMM występuje rozbieżność między deklaracją wskaźnika m_hmm a funkcją GetIppiEHMM zwracającą obiekt zamiast wskaźnika. Zaproponowano trzy możliwe rozwiązania: zmiana typu wskaźnika na obiekt, zmiana typu zwracanego przez funkcję na wskaźnik lub dereferencja wskaźnika w ciele funkcji. Dodatkowo, problem z funkcją sqrt wynikał z niejednoznaczności przeciążenia, którą rozwiązuje podanie argumentu jako liczby zmiennoprzecinkowej (np. 2.0 zamiast 2). Projekt bazuje na starszej wersji OpenCV (Beta 3 i 3.1), a próba kompilacji pod najnowszą wersję wymagała dodatkowych plików nagłówkowych i dostosowań, w tym zmiany kodowania na Unicode. Zalecane jest dołączenie pełnego projektu wraz z plikami nagłówkowymi oraz włączenie prekompilowanych nagłówków w ustawieniach projektu.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA