有一个类成员函数调用类外的函数

时间:2014-12-03 05:21:08

标签: c++ class vector

我在B类和D类中有一个成员函数,它调用函数'computeValue',它不是任何类的成员函数。 'computeValue'函数执行某种类型的算法并返回一个值。但是,我似乎遇到了很多编译错误,并且不确定其根本原因是什么。类的成员函数甚至可以调用非成员函数吗?

#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()
{

}

2 个答案:

答案 0 :(得分:1)

computeValue需要声明课程A,因此请在其前面声明A

class A
{
};

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

类的成员函数甚至可以调用非成员函数吗?

cource,是的。

答案 1 :(得分:0)

是的,绝对可以从班级调用班级非会员功能。

由于主要有两个问题,你在这里遇到错误:

  1. 您正在使用向量,但您尚未在代码中声明向量头文件。 #include<vector>

  2. 您正在使用A类指针作为参数来运行&#34; computeValue&#34;这是在A类之前定义的。 因此要么在函数之前定义类A,要么使用前向声明概念。

  3. 以下是无错修改代码:

    #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;
    }
    

    此代码将为您提供输出:&#34; D构造函数&#34; 我希望这会对你有所帮助。