请求非类类型类*的成员

Request for member which is of non-class type Class*

本文关键字:成员 类型 请求      更新时间:2023-10-16

我正在编写两个类,用于计算方程中的表达式,即:方程和表达式。Equation 类包含两个 Expression* 成员变量,需要使用这两个变量来维护公式的右侧和左侧。为了解决它们如何访问每个表达式(字符串)的问题,我为 Exression 类的构造函数创建了以下定义和实现:

#ifndef EXPRESSION_H
#define EXPRESSION_H
#include <string>
using namespace std;
class Expression
{
    private:
        int l, r;       
    public:
        Expression(string part);        
        string equationPart;

};
#endif

#include "Expression.h"
#include<cmath>
#include<iostream>
using namespace std;
Expression::Expression(string part)
{
    int len = part.length();
    equationPart[len];
    for(int i = 0; i < len; i++)
    {
        equationPart[i] = part[i];
    }   
}

我还为方程类的实现编写了以下内容:

#ifndef EQUATION_H
#define EQUATION_H
#include "Expression.h"
#include <string>
using namespace std;
class Equation
{
    public:
        Equation(string eq);
        ~Equation();
        int evaluateRHS();
        int evaluateLHS();
        void instantiateVariable(char name, int value);
    private:
        Expression* left;
        Expression* right;
};
#endif


#include "Equation.h"
#include<cmath>
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
Equation::Equation(string eq)
{
    int length = eq.length();
    string l;
    string r;
    bool valid = false;
    short count = 0;
    for(int i = 0; i < length; i++)
    {
        if(eq[i] == '=')
        {
            valid = true;
            for(short j = i+1; j < length; j++)
            {
                r += eq[j];
            }
            for(short j = i-1; j > 0; j--)
            {
                count++;
            }
            for(short j = 0; j < count; j++)
            {
                l += eq[j];
            }   
        }   
    }
    if(valid == false) 
    {
        cout << "invalid equation" << endl;
    }
    else if(valid == true)
    {
        left = new Expression(l);
        right = new Expression(r);
    }
}

当我如上所示运行程序时,它会编译;但是当我尝试访问在 Equation 中声明的左右 Expression 对象的字符串成员变量时,如下所示:

void Equation::instantiateVariable(char name, int value)
{
    string s1 = left.equationPart; 
    string s2 = right.equationPart; 
    short length1 = s1.length();
    short length2 = s2.length();
    bool found1 = false;
    for(short i = 0; i < length1; i++)
    {
        found1 = true;
        if(left.equationPart[i] == name)
        {
            left.equationPart[i] = itoa(value);
        }          
    }
    //and so on...
}

我最终收到编译器错误:

error: request for member 'equationPart' in '((Equation*)this)->Equation::left', which is of non-class type 'Expression*'

此错误仅在 instantiateVariable 函数中就会多次出现。任何帮助或建议将不胜感激。

"left" 是一个指针,使用 "->" 访问。将"left."更改为"left->"

leftright都是Expression指针,因此您需要通过operator->访问它们,例如:

string s1 = left->equationPart;