首页 文章

在'…'中请求成员'…',这是非类型的 . 但为什么? [重复]

提问于
浏览
0

这个问题在这里已有答案:

class automat_finit
{
    int CxQ, CxF, CxSigma, CxTranzitii, q0, SC, *F;
    char *Sigma;

    struct delta
    {
        int a1, a2;
        char c;
    }*G;

public:
    int tranzitie(int x, char c)
    {
        for(int i = 0; i < CxTranzitii; i++)
            if((G[i].a1 == x) && (G[i].c == c))
                return G[i].a2;
        return -1;
    }

    automat_finit()
    {
        ifstream f("automatfinit.in");
        SC = 0;
        f >> CxQ;
        F = new int[CxF];
        for(int i = 0; i < CxF; i++)
            f >> F[i];
        Sigma = new char[CxSigma];
        for(int i = 0; i < CxSigma; i++)
            f >> Sigma[i];
        f >> CxTranzitii;
        G = new delta[CxTranzitii];
        for(int i = 0; i < CxTranzitii; i++)
            f >> G[i].a1 >> G[i].c >> G[i].a2;
        f.close();
    }

    bool citire(char *cuvant)
    {
        int l = strlen(cuvant);
        for(int i = 0; i < l; i++)
        {
            SC = tranzitie(SC, cuvant[i]);
            if(SC == -1) return false;
        }
        for(int i = 0; i < CxF; i++)
            if(SC == F[i]) return true;
        return false;
    }
};

int main()
{
    automat_finit A();
    char w[100];
    cin>>w;
    if(A.citire(w) == true) cout<<"Word accepted"<<endl;
    else cout<<"Word denied"<<endl;
}

我使用'citire'方法在第64行的 main 中收到错误,我不知道为什么 . 它说

错误:请求'A'中的成员'citire',这是非类型'automat_finit()' .

此外,如果我声明对象 A 而不是 A() ,我得到错误的alloc错误 . 这是为什么?

2 回答

  • 0

    它说“错误:在'A'中请求成员'citire',这是非类型'automat_finit()' .

    这就是它所说的 . automat_finit A() 声明一个函数,而不是一个对象 .

    如果我声明对象A而不是A()

    正确修复 .

    我得到错误的alloc错误 . 这是为什么?

    因为你在某个地方分配不好 . 是时候调试了!检查您的分配 . 检查你的 new . 检查用于绑定 new 的变量 . 例如,你在哪里给了 CxF 一个有意义的值?

  • 0

    automat_finit A(); 声明一个名为 A 的函数,该函数返回 automat_finit 对象 . 如果要声明名为 Aautomat_finit 类型的对象,则需要删除该子句:

    automat_finit A;
    

    至于产生的内存分配错误, CxFCxSigma 成员在 F = new int[CxF]Sigma = new char[CxSigma] 语句分别使用时未初始化 . 未初始化的类成员具有不确定的值(除非在全局内存中分配对象,在您的情况下不是这种情况) . 默认情况下, new 运算符在无法分配请求的内存量时会抛出 std::bad_alloc 异常 . 默认情况下,您的成员可能包含非常大的值,您不会覆盖这些值 .

相关问题