Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Problemy z kompilacją programu w C++

Skreczi 08 Gru 2007 21:33 2415 10
  • #1 08 Gru 2007 21:33
    Skreczi
    Poziom 9  

    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ć.

    0 10
  • Pomocny post
    #2 09 Gru 2007 10:17
    RhinoRace
    Poziom 16  

    ok

    Code:
    \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
    Code:
    \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 ;)

    0
  • #3 09 Gru 2007 10:21
    Seba85
    Poziom 16  

    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.

    0
  • #4 09 Gru 2007 16:17
    Skreczi
    Poziom 9  

    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

    0
    Załączniki:
  • #5 10 Gru 2007 00:04
    Skreczi
    Poziom 9  

    podejrzewam, że to ten kawałek kodu sprawia problemy:

    Code:

    #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

    0
  • #6 10 Gru 2007 07:59
    RhinoRace
    Poziom 16  

    w klasie masz drobny blad ;)

    Code:
    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
    Code:
    CvEHMM GetIppiEHMM() {
    
          return m_hmm;
       };

    CvEHMM m_hmm;

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

    CvEHMM* m_hmm;

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

    CvEHMM* m_hmm;

    sam mosisz zdecydowac co w twoim programie najlepiej sie sprawdzi :)

    0
  • #7 10 Gru 2007 11:27
    Seba85
    Poziom 16  

    RhinoRace ma rację, tylko zastanawia mnie jedno: po co w ogóle zmieniałeś ten fragment kodu?

    Code:
       CvEHMM* GetIppiEHMM() {
    
          return m_hmm;
       };


    Przecież w oryginalnej wersji tak właśnie było...

    0
  • #8 10 Gru 2007 14:57
    Skreczi
    Poziom 9  

    Rhino - ponownie dziękuje :)

    Nie było Seba - tego kawałka nie ruszałem.

    0
  • #10 10 Gru 2007 15:45
    Skreczi
    Poziom 9  

    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

    0
  • #11 10 Gru 2007 18:15
    Seba85
    Poziom 16  

    Czasami kompilator przy napotkaniu jakichś poważniejszych błędów przerywa kompilacje, może dlatego nie łapało tych starych błędów.

    0
  Szukaj w 5mln produktów