c++ - "no matching function for call to"让我感到困惑

标签 c++

我带着课本上的 PCNN 代码又回来了。
我在相关行的 pcn2d.cc 中收到“没有匹配的函数调用”错误
带有变量 F、L、U、T 和 Y。这是类文件、代码文件和编译器日志:

笠美.h

    //
    // rimage.h  
    //  
    //  
    // Jason M. Kinser  
    // 15 October 1995  
    // rimage.h  
    // an image of real elements  
    // 1 April 1996 - added histogram  
    // 15 April 1996 - addeed hgradientbox  
    // 27 June 1996 - a dded /= rimage  
    // 7 July 1996 - added / rimage, Smooth  
    //  
        #include "matrix.h"  
        #ifndef RIMAGE    
        #define RIMAGE  
        typedef unsigned short word;    
        typedef unsigned long dword;  

        class rimage : public matrix {  
    public:  
        rimage( void );  
        rimage( int, int );  
        rimage( rimage & );  
        rimage & operator=( const matrix & A );  
        rimage & operator=( const rimage & A );  
        rimage & operator/=( int );  
    // Math  
        rimage operator+( float );  
        rimage operator+( const rimage & );  
        rimage operator*( const rimage & ); // element  
        rimage operator*( float );  
        friend rimage operator+( float, const rimage & );  
        friend rimage operator*( float, const rimage & );  
        rimage Convolve( rimage & );  
    // Image conversions  
        void UpsideDown( void );  
    // Input / Output  
        void SaveTarga( char * );  
    } ;  
    #endif  

pcnn2d.h

    //  
    // pcnn2d.h  
    // A 2D Pulse-Coupled Neural Network  
    // Jason Kinser  
    // 15 April 1996  
    //  
    #include "rimage.h "  
    class PCNN {  
    int vert, horz;  
    rimage Quantized ( void );  
    public:  
         rimage F, L, U, T, Y, K;  
         float af, al, at, beta, vf, vl, vt;  
         PCNN( int, int);       // The two dimensions  
         PCNN( const PCNN & );  // copy  
         ~PCNN( void );  
    int KernVert( void) const;   
    int KernHorz( void) const;  
    void StdK( void );  
    int Iterate ( rimage & );  
    int FastIterate( rimage & ); // uses fast linking   
    void Clear( void );  
    void Save( char * );  
    void Load( char * );  
    };  

pcnn2d.cc

    //  
    // pcnn2d.cc  
    // The Pulse-Coupled Neural Network  
    //  
    // Jason Kinser  
    // 15 April 1996  

    #include <math.h>  
    #include <stdlib.h>  
    #include "pcnn2d.h"  

    PCNN::PCNN( int V, int H )  
    {  
        vert = V;   horz = H;  
        F.New( V, H );  
        L.New( V, H );  
        U.New( V, H );  
        T.New( V, H );  
        Y.New( V, H );  
        K.New( 5, 5 );  
        af = 10.0; al = 1.0; at = 5.0;  
        beta = 0.1;  
        vf = 0.5;   vl = 0.5;   vt = 20.0;  
        StdK();  
    }  

    PCNN::PCNN( const PCNN & P )
    {
        vert = P.vert; horz = P.horz;
        F.New( vert, horz );
        L.New( vert, horz );
        U.New( vert, horz );
        T.New( vert, horz );
        Y.New( vert, horz );
        K.New( P.KernVert ( ), P.KernHorz( ) );
        F = P.F;    L = P.L;        U = P.U;
        T = P.T;    Y = P.Y;        K = P.K;
        af = P.af; al = P.al;   at = P.at;
        beta = P.beta;
        vf = P.vf; vl = P.vl; vt = P.vt;
    }
    PCNN::~PCNN( void )
    {
        F.Dispose();    L.Dispose();    U.Dispose();
        T.Dispose();    Y.Dispose();    K.Dispose();
    }

    int PCNN::KernVert( void ) const
    // returns the vertical dimension of the kernel
    {   return K.Vert( ); }

    int PCNN::KernHorz( void ) const
    {   return K.Horz( ); }

    void PCNN::StdK( void )
    {   int i, j, kv, kh; float val;
        kv = K.Vert(); kh = K.Horz();
        for ( i=0; i<kv; i++ ) for ( j=0; j<kh; j++ ) 
        {
            val = hypot( i-kv/2, j-kh/2 );
            if( val != 0.0 ) val = 1.0/val;
            else val = 1.0;
            K[i][j] = val;
        }
    }
    rimage PCNN::Quantized ( void )
    {
        int i,j; rimage ans( vert, horz );
        rimage work( vert, horz ), k( 3,3 );
        k.Clear( 1.0 ); 
        work = Y.Convolve( k );     //ERROR LINE 74
    for ( i=0; i<work.Vert(); i++ ) for ( j=0; j<work.Horz(); j++ )
        if( work[i][j] > 1.0 ) ans[i][j] = 1.0;
        else ans [i][j] = 0.0;
    return ans;
    }
    int PCNN::Iterate( rimage & A )
    {
        rimage work( F.Vert() , F.Horz() );
        work = Y.Convolve( K );              //ERROR LINE 83
        F = exp( -1.0/af ) * F + vf * work + A; //ERROR LINE 84
        L = exp( -1.0/al ) * L + vl* work;  //ERROR LINE 85
        U = F * (1.0 + beta * L);           //ERROR LINE 86
        for( int i=0; i<vert; i++ ) for ( int j = 0; j<horz; j++ )
            if( U[i][j] > T[i][j] )
            Y[i][j] = 1.0;
            else
            Y[i][j] = 0.0;
        T = exp ( -1.0/at ) * T + vt * Y;   //ERROR LINE 92
        return int( Y.Sum( ) );
    }
    int PCNN::FastIterate( rimage & A )
    {
        rimage work ( F.Vert(), F.Horz()), Q ( F. Vert () , F.Horz ());
        int n=0;
        if( vf != 0 ) work = Y.Convolve( K );   //ERROR LINE 99
        F = exp( - 1.0/af ) * F + vf * work + A;    //ERROR LINE 100
        Y.Clear();
        do {
            Q = Y; n++;
            L = Quantized( );       //ERROR LINE 104
            U = F * (1.0 + beta * L);   //ERROR LINE 105
            for( int i=0; i<vert; i++ ) for( int j=0; j<horz; j++ )                 
            if( U[i][j] > T[i][j] )
            Y[i][j] = 1.0;
        } 
        while( (Q + Y).Sum() > 1 && n < 5);
        T = exp( -1.0/at ) * T + vt * Y;    //ERROR LINE 111
        return int ( Y.Sum( ) );
    }

编译日志:

g++.exe -c "PCNN Code/pcnn2d.c" -o   
"PCNN Code/pcnn2d.o" -I"C:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include"    
-I"C:/Dev-Cpp/include/c++/3.4.2/backward"    
-I"C:/Dev-Cpp/include/c++/3.4.2/mingw32"    
-I"C:/Dev-Cpp/include/c++/3.4.2"  
-I"C:/Dev-Cpp/include"     


In file included from C:/Dev-Cpp/include/c++/3.4.2/backward/iostream.h:31,  
                 from PCNN Code/vector.h:9,  
                 from PCNN Code/matrix.h:10,  
                 from PCNN Code/rimage.h :15,  
                 from PCNN Code/pcnn2d.h:8,  
                 from PCNN Code/pcnn2d.c:12:  
C:/Dev-Cpp/include/c++/3.4.2/backward/backward_warning.h:32:2:   
warning: #warning This file includes at least one deprecated or antiquated header.   
Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard.   Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.  
PCNN Code/pcnn2d.c: In member function `rimage PCNN::Quantized()':  
PCNN Code/pcnn2d.c:74: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  

PCNN Code/pcnn2d.c: In member function `int PCNN::Iterate(rimage&)':  
PCNN Code/pcnn2d.c:83: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:84: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:84: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:85: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:85: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:86: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:86: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:86: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:92: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:92: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c: In member function `int PCNN::FastIterate(rimage&)':  
PCNN Code/pcnn2d.c:99: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:100: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:100: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:104: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:105: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:105: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:105: error: no matching function for call to `rimage::rimage(rimage)'  

PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:111: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  
PCNN Code/pcnn2d.c:111: error: no matching function for call to `rimage::rimage(rimage)'  
PCNN Code/rimage.h :27: note: candidates are: rimage::rimage(rimage&)  

make.exe: *** ["PCNN Code/pcnn2d.o"] Error 1  
Execution terminated

最佳答案

它谈到不完全匹配对 rimage::rimage(rimage&) 的调用。这通常意味着您正在尝试从临时对象进行复制,如果它是 rimage::rimage(const rimage&) 可以使用此复制构造函数。

为什么不是呢?因为代码是 15 年前的,从以前就有 C++ 标准?

关于c++ - "no matching function for call to"让我感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5348662/

相关文章:

c++ - 很难理解封装

c++ - 在其他线程QT/C++中调用方法

c++ - 如何使用 swagger-codegen cpprest 客户端库代码?

c++ - 为什么 C++ 编译器不将此条件 bool 赋值优化为无条件赋值?

c++ - 在 winsock 中用 C++ 创建一个套接字并连接到谷歌,并在响应结束时得到一些垃圾

c++ - 使用 GetProcAddress : callback function fails with invalid parameter 从 C++ 调用 Delphi DLL

c++ - 无法使用 mingw-w64 编译智能指针

java - 在android中使用opencv检测玩具车后面

c++ - 调用模板祖 parent 的成员函数

C++使用唯一指针隐式删除类