Thread: Returning a reference == int(int (*)()) ??

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1
    [](){}(); manasij7479's Avatar
    Join Date
    Feb 2011
    Location
    *nullptr
    Posts
    2,657

    Returning a reference == int(int (*)()) ??

    I have a member function:
    Code:
            T& at(int n)
            {
                return coeff.at(n);
            }
    where coeff is a std::vector<T>

    When I attempt to use the returned value in a multiplication with another T instantiated to integers, I get the following error:
    Code:
    polynomial.hpp:76:4: error: invalid operands of types ‘int(int (*)())’ and ‘int’ to binary ‘operator*’
    Here is the complete code:
    polynomial.hpp
    Code:
    #ifndef MM_POLY
    #define MM_POLY
    #include<vector>
    #include<string>
    #include<sstream>
    #include<initializer_list>
    #include<stdexcept>
    namespace mm
    {
        
        template<typename T=double>
        class Polynomial
        {
        public:
            Polynomial(std::initializer_list<T> dat)
            {
                for(auto x:dat)
                    coeff.push_back(x);
            }
            Polynomial(int n)
            {
                coeff.reserve(n+1);
            }
            std::string str(std::string var) const
            {
                std::ostringstream os;
                for(uint i=0;i<coeff.size()-1;++i)
                    os<<coeff[i]<<"*"<<var<<"^"<<i<<" + ";
                os<<coeff[coeff.size()-1]<<"*"<<var<<"^"<<coeff.size()-1;
                return os.str();
            }
            T eval(T t) const
            {
                T result = T(0);
                T mul = T(1); 
                for(int i=0;i<=degree();++i,mul*=t)
                    result+=mul*coeff[i];
                return result;
            }
            
            
            int degree() const
            {
                return coeff.size()-1;
            }
            T& at(int n)
            {
                return coeff.at(n);
            }
        private:
            std::vector<T> coeff;
        };
        
        template
        <
        typename T
        >
        std::pair
        <
        Polynomial<T>
        ,T
        >
        SyntheticDivision(Polynomial<T> dividend,Polynomial<T> divisor)
        {
            int qdeg = dividend.degree()-1;
            Polynomial<T> quotient(qdeg);
            T remainder(T());
            if(divisor.degree()!=1)
                throw(std::logic_error("SyntheticDivision:Divisor.Degree !=1"));
            
    
            T h=- divisor.at(0)/divisor.at(1);
    
            for(int i=qdeg;i>=0;--i)
            {
                remainder = dividend.at(i+1) + remainder*h;
                quotient.at(i)=remainder;
            }
            
            return std::pair<Polynomial<T>,T>(quotient,remainder);
        }
    }
    
    #endif
    Similar errors are reported at lines 76,77 and 80.
    main.cpp
    Code:
    #include "polynomial.hpp"
    #include<iostream>
    int main()
    {
        mm::Polynomial<int> dn({2,-3,1}),dv({-1,1});
        auto result = mm::SyntheticDivision<int>(dn,dv);
        std::cout<<result.first.str("x");
    }
    I couldn't produce the problem with a simpler example:
    Code:
    template<typename T>
    class Foo
    {
    public:
        Foo(T t):foo(t){};
        T& val()
        {
            return foo;
        }
    private:
        T foo;
    };
    int main()
    {
        Foo<int> bar(6);
        int xip = 5;
        int bas  = xip * bar.val();
    }
    Last edited by manasij7479; 12-16-2012 at 07:03 AM.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Returning by reference
    By cuo741 in forum C++ Programming
    Replies: 1
    Last Post: 12-09-2010, 07:06 AM
  2. returning by reference / value.
    By Kitt3n in forum C++ Programming
    Replies: 4
    Last Post: 05-28-2010, 12:02 PM
  3. returning reference
    By l2u in forum C++ Programming
    Replies: 34
    Last Post: 04-17-2008, 11:29 AM
  4. Returning a reference? Why?
    By Mr_Miguel in forum C++ Programming
    Replies: 12
    Last Post: 09-13-2007, 11:43 AM