我在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()
{
}
答案 0 :(得分:1)
computeValue
需要声明课程A
,因此请在其前面声明A
:
class A
{
};
int computeValue(vector<A*>ex)
{
//implementation of algorithm
}
类的成员函数甚至可以调用非成员函数吗?
cource,是的。
答案 1 :(得分:0)
是的,绝对可以从班级调用班级非会员功能。
由于主要有两个问题,你在这里遇到错误:
您正在使用向量,但您尚未在代码中声明向量头文件。
#include<vector>
您正在使用A类指针作为参数来运行&#34; computeValue&#34;这是在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;
}
此代码将为您提供输出:&#34; D构造函数&#34; 我希望这会对你有所帮助。