简体   繁体   中英

Having a class member function call a function outside the class

I have a member function in class B and class D that calls the function 'computeValue' which is not a member function of any class. The 'computeValue' function performs some type of algorithm and returns a value. However it seems like I'm getting a lot of compilation errors and not sure what the underlying reasons are. Is it even possible for member functions of classes to call non-member functions?

#include<iostream>
using namespace std;


int computeValue(vector<A*>ex) //Error - Use of undeclared identifier 'A'
{
    //implementation of algorithm  
}

class A
{

};

class B
{

    int sam2()
    {
        return computeValue(exampleB); // Error - No matching function for call to 'computeValue                         
    }
    vector <A*> exampleB;

};

class D
{
    int sam1 ()
    {
        return computeValue(exampleD);//  Error - No matching function for call to 'computeValue
    }
    vector<A*> exampleD;
};

int main()
{

}

computeValue needs the declaration of class A , so declare A before it:

class A
{
};

int computeValue(vector<A*>ex)
{
    //implementation of algorithm  
}

Is it even possible for member functions of classes to call non-member functions?

Of cource, yes.

Yes, definitely you can call class non-member function from class.

Here you are getting errors because of mainly two issue:

  1. You are using vector but you haven't declared vector header file in your code. #include<vector>

  2. You are using class A pointer as a parameter to function "computeValue" which is defined before the class A. So either define class A before function or use forward declaration concept.

Here is error free modified code:

#include<iostream>
#include<vector>

using namespace std;

**class A; //forward declaration of Class A**

int computeValue(vector<A*> ex) //Error - Use of undeclared identifier 'A'
{
   //implementation of algorithm  i
       return 5;
}

class A
{

};

class B
{

    int sam2()
    {
        return computeValue(exampleB); // Error - No matching function for call to 'computeValue
    }
    vector <A*> exampleB;

};

class D
{
public:

        D()
        {
                cout<<"D constructor"<<endl;
        }

    int sam1 ()
    { 
        return computeValue(exampleD);//  Error - No matching function for call to 'computeValue
    }
    vector<A*> exampleD;
};

int main()
{
    D d;
}

This code will give you output: "D constructor" I hope this will help you.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM