我再次从教科书中获得了该PCNN代码。
我在关联行中的pcn2d.cc中收到“没有匹配的函数调用”错误
具有变量F,L,U,T和Y。这是类文件,代码文件和编译器日志:

图像

    //
    // 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 ++标准开始?

07-24 14:14