C++ 不能从类型 bool(class) 转换为 bool

V S*_*ebi 0 c++ boolean compiler-errors function

所以我有一个抽象超类 ReadWords,和 3 个子类,FirstFilter、SecondFilter 和 ThirdFilter。

Readwords.h:

#ifndef _READWORDS_H
#define _READWORDS_H

using namespace std;
#include <string>
#include <fstream>
#include <iostream>
#include <cstdlib>

class ReadWords
{   public:

        ReadWords(char *filename);

        void close();

        string getNextWord();

        bool isNextWord();

        virtual bool filter(string word)=0;

        string getNextFilteredWord();

    private:
        ifstream wordfile;
        bool eoffound;
        string nextword;
        string fix(string word);

 };

 #endif
Run Code Online (Sandbox Code Playgroud)

第一个过滤器.h:

#ifndef _FIRSTFILTER_H
#define _FIRSTFILTER_H

using namespace std;
#include <string>
#include <fstream>
#include <iostream>
#include "ReadWords.h"

class FirstFilter: public ReadWords
{   public:
       FirstFilter(char *filename);
       virtual bool filter(string word)
       {
           for(int i=0; i<word.length(); i++){
                if (word[i]>='A'&&word[i]<='Z') return true;
           }
           return false;
       }
};

#endif
Run Code Online (Sandbox Code Playgroud)

FirstFilter.cpp:

using namespace std;
#include "FirstFilter.h"

FirstFilter::FirstFilter(char *filename)
    :ReadWords(filename)
{
}
Run Code Online (Sandbox Code Playgroud)

在主函数中,我创建了 FirstFilter、SecondFilter 和 ThirdFilter 类型的 3 个对象,我有类似的东西:

FirstFilter f1(file);
while(f1.isNextWord){
   //etc
}
Run Code Online (Sandbox Code Playgroud)

我收到所有 3 个对象的此错误:

error: cannot convert 'ReadWords::isNextWord' from type 'bool (ReadWords::)()' 
to type 'bool'|
Run Code Online (Sandbox Code Playgroud)

有任何想法吗 ?告诉我你是否也需要 ReadWords.cpp,我没有放它,因为它有点大。

Vla*_*cow 6

代替

while(f1.isNextWord){
Run Code Online (Sandbox Code Playgroud)

其中 isNextWord 用作函数指针

while(f1.isNextWord() ){
Run Code Online (Sandbox Code Playgroud)

其中 isNextWord 用作函数调用