让类成员函数调用类外的函数
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<vector>
您正在使用 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 构造函数” 我希望这会对你有所帮助。
【讨论】:
以上是关于让类成员函数调用类外的函数的主要内容,如果未能解决你的问题,请参考以下文章