Announcement

Collapse
No announcement yet.

C++ Builder 5 mit WinXP: Error 2061

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • C++ Builder 5 mit WinXP: Error 2061

    I have a "matrix.h" for matrix.cpp


    matrix.h
    Code:
    #ifndef __MATRIX_H__
    #define __MATRIX_H__
    
    #include <stdexcept>
    #include <cassert>
    
    template <class T>
    class Matrix
    {
        T*           data;
        unsigned int rows;
        unsigned int cols;
    
        T* new_copy(const T* src, size_t src_size, size_t dst_size)
        {
            assert(dst_size >= src_size);
            T* dest = new T[dst_size];
            try
            {
                std::copy(src, src + src_size, dest);
            }
            catch(...)
            {
                delete[] dest;
                throw;
            }
            return dest;
        }
    
    public:
        Matrix(unsigned int _rows, unsigned int _cols):
            rows(_rows),
            cols(_cols)
        {
            assert(rows > 0);
            assert(cols > 0);
            if (rows == 0 || cols == 0)
                throw std::invalid_argument("Invalid argument in Matrix ctor");
    
            data = new T[rows * cols];
            if (!data)
                throw std::runtime_error("Not enough memory in Matrix ctor");
        }
    
        ~Matrix()
        {
            delete[] data;
        }
    
        Matrix(const Matrix& m):
            data(new_copy(m.data, m.rows * m.cols, m.rows * m.cols)),
            rows(m.rows),
            cols(m.cols)
        {
        }
    
        Matrix& operator=(const Matrix& m)
        {
            if (this != &m)
            {
                T* temp = new_copy(m.data, m.rows * m.cols, m.rows * m.cols);
                delete[] data;
                data = temp;
                rows = m.rows;
                cols = m.cols;
            }
            return *this;
        }
    
        template<class U>
        class Helper
        {
            Matrix<U>&   matrix;
            unsigned int i;
    
            Helper(Matrix<U>& _mc, unsigned int _i): matrix(_mc), i(_i) {};
            Helper(const Matrix<U>& _mc, unsigned int _i): matrix(const_cast<Matrix&>(_mc)), i(_i) {};
            Helper(const Helper&);
            Helper& operator=(const Helper&);
    
            friend class Matrix<U>;
    
        public:
            U& operator[](unsigned int k) const
            { 
                assert(i < matrix.rows);
                assert(k < matrix.cols);
                if (i >= matrix.rows || k >= matrix.cols)
                    throw std::range_error("Range error in Matrix::Helper::operator[]() const");
    
                return matrix.data[matrix.cols * i + k]; 
            }
    
            U& operator[](unsigned int k) 
            { 
                assert(i < matrix.rows);
                assert(k < matrix.cols);
                if (i >= matrix.rows || k >= matrix.cols)
                    throw std::range_error("Range error in Matrix::Helper::operator[]()");
    
                return matrix.data[matrix.cols * i + k]; 
            }
        };
    
        Helper<T> operator[](unsigned int i) const
        { 
            assert(i < rows);
            if (i >= rows)
                throw std::range_error("Range error in Matrix::operator[]() const");
    
            return Helper<T>(*this, i); 
        }
    
        Helper<T> operator[](unsigned int i) 
        { 
            assert(i < rows);
            if (i >= rows)
                throw std::range_error("Range error in Matrix::operator[]()");
    
            return Helper<T>(*this, i); 
        }
    
    };
    
    #endif //__MATRIX_H__


    Why in dedicated line Borland C++ Builder 5 give up mistake (E2061 Friends must be function or classes)

    or

    how this part of code must be make over for successfull compile Borland C++ Builder?
    p.s.: MS Visual C++ 2005 compile successfully

    ...please...help!!!

  • #2
    Warum ist die Überschrift auf Deutsch und der Rest auf Englisch?

    Des Weiteren gibt es keinen

    Borland Comp C++ Builder 5.02

    Entweder es ist der "alte" Borland C++ Compiler 5.02

    oder

    Version 5 aus der C++Builder Reihe -> dann ist das hier der falsche Thread
    Zuletzt editiert von Christian Marquardt; 07.07.2009, 06:27.
    Christian

    Comment


    • #3
      Sorry for deutsch title

      Originally posted by Christian Marquardt View Post
      Warum ist die Überschrift auf Deutsch und der Rest auf Englisch?

      Des Weiteren gibt es keinen

      Borland Comp C++ Builder 5.02

      Entweder es ist der "alte" Borland C++ Compiler 5.02

      oder

      Version 5 aus der C++Builder Reihe -> dann ist das hier der falsche Thread

      ...And Compiler of CodeGear (Builder C++ 2007) give up the same mistake.

      Have you any ideas for remaking for successfull compiler for Builder 5.2 or Builder 2007?

      ...Will be very grateful

      Comment

      Working...
      X