让类成员函数调用类外的函数

Posted

技术标签:

【中文标题】让类成员函数调用类外的函数【英文标题】:Having a class member function call a function outside the class 【发布时间】:2014-12-03 05:21:08 【问题描述】:

我在 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()



【问题讨论】:

【参考方案1】:

computeValue需要类A的声明,所以在它之前声明A

class A

;

int computeValue(vector<A*>ex)

    //implementation of algorithm  

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

当然,是的。

【讨论】:

【参考方案2】:

是的,你绝对可以从类中调用类的非成员函数。

这里您遇到错误主要是因为两个问题:

    您正在使用向量,但尚未在代码中声明向量头文件。 #include&lt;vector&gt;

    您正在使用 A 类指针作为函数“computeValue”的参数,该函数在 A 类之前定义。 所以要么在函数之前定义A类,要么使用前向声明概念。

这里是没有错误的修改代码:

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

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

【讨论】:

以上是关于让类成员函数调用类外的函数的主要内容,如果未能解决你的问题,请参考以下文章

在类外调用的私有函数成员

让类成员函数指针成为可调用对象

作为类成员的函数的定义

友元

7. 第 7 章 类和对象简介

第十六周oj刷题——Problem I: 改错题:类中私有成员的訪问