c++在函数中使用函数

c++ using functions within functions

本文关键字:函数 c++      更新时间:2023-10-16

我是c++的新手,但我正在做一个项目,处理对集合进行不同的操作,其中一个简单地打印出来,如果集合是有限的。SoS是正在使用的对象,它只是代表字符串集合,并具有字符串向量和布尔值作为其数据成员。我创建了一个函数来检查集合是否有限,我试图在打印函数中调用它,但我一直得到一个错误,说"没有成员名为"isFinite。这是我的资料,任何帮助都是非常感谢的。

void SoS::print() const{
    if (m_vos.isFinite() == true){
        for (int i = 0; i < m_vos.size(); i++){
            cout << m_vos[i]<< endl;
        }
    }
    else{
        cout << "COMPLEMENT OF:"<< endl;
        for (int i = 0; i< m_vos.size(); i++){
            cout << m_vos[i]<< endl;
        }
    }
}
bool SoS::isFinite() const{
    if (isfinite(m_vos.size()){
        return true;
    }
    return false;
}

c++和C一样,由于其单遍编译器设计的特性,需要前向声明。在c++中,这通常不是问题,因为类是在.cpp文件之前在头文件中完整声明的,但该错误信息表明您还没有充实您的类声明。

应该是这样的(根据你的描述):

class SoS {
private:
    vector<string> m_vos;
    bool someBool;
public:
    void print() const;
    bool isFinite() const;
}

问题是您试图在std::vector<std::string> (m_vos)上调用SoS::isFinite()std::vector没有这样的成员。只能在SoS类型的对象或SoS函数中调用SoS::isFinite()

幸运的是,您在SoS函数中,因此您可以简单地将代码更改为:

void SoS::print() const{
    // Calls SoS::isFinite()
    if (isFinite() == true){