【问题标题】:Using a private member function in the class在类中使用私有成员函数
【发布时间】:2015-01-23 21:36:58
【问题描述】:

所以我有这门课:

该类的目的是将后缀代数表达式(1234*+-)更改为中缀表达式(1*2+3-4)。

    class PostfixExpression
    {
    private:
        string postfix;
        vector<string> tokenizedEx;
        double result;

        void tokenizeStr(); // Where do I call this?

    public:
        PostfixExpression(string p);    
        //mutators, and accessors for string and double only
        //no accessor and mutator for vectors
        string changeToInfix() const;
    };
    PostfixExpression::PostfixExpression(string p)
    {
        setPost(p);
    }
   //mutators, and accessors
   void PostfixExpression::tokenizeStr() 
    {

        stringstream ss(postfix);
        tokenizedEx.clear();
        string hold;
        int i = 0;
        while (ss >> hold)
        {
            tokenizedEx.push_back(hold);
        }
    }
    //....

私有类tokenizeStr() 的目的是对字符串进行标记并将其放入vector&lt;string&gt; tokenizedEx

例如,在我的主要,我会

int main()
{
     PostfixExpression test("1 2 3 4 * + -");
}

现在我正在尝试对字符串进行标记,并通过私有成员函数 tokenizeStr() 将其更新为 vector&lt;string&gt; tokenizedEx

标记化后,向量中的每个元素都应该包含一个整数或一个运算符,但我似乎找不到调用该函数的方法。

我知道从 main 调用私有成员函数是完全非法的,因为该函数是私有的。

欢迎提出任何建议。

【问题讨论】:

    标签: c++ class private-members


    【解决方案1】:

    你的 setPost 方法是做什么的?设置后缀成员?

    您可以在调用 setPost 之后立即在构造函数中调用 tokenizeStr()。

    【讨论】:

    • setPost 是字符串后缀的修改器。另外,我试图把它放在构造函数中,但它似乎不起作用,因为向量仍然是空的
    • 该向量可能应该是空的,因为您还没有在其中放入任何标记。您遇到的实际错误是什么?
    • 原来这对我来说是愚蠢的。向量实际上是填充的,但是我没有使用正确的方法来检查它是否为空。
    【解决方案2】:

    我在你的类中看到了一个 changeToInfix() 方法,你没有展示它的实现。该方法应该是调用 tokenizeStr() 的方法。

    【讨论】:

    • 我跳过了 changeToInfix() 因为代码有点长。但是当我尝试调用 tokenizeStr() 时,出现以下错误:error C2662: 'PostfixExpression::tokenizeStr' : cannot convert 'this' pointer from 'const PostfixExpression' to 'PostfixExpression &'
    • 我认为这是因为 changeToInfix() 函数是一个 const 所以我不能调用私有成员函数
    • 名称中带有“change”的函数可能不应该是 const,原因很明显。但是,如果您确实确定希望该函数为 const,您也可以将 tokenizedEx 声明为可变的。
    • 是的,我不得不这样做,因为这是要求之一。您能否详细说明将 tokenizedEx 声明为可变的?
    • 这进入了“按位常量”与“逻辑常量”,这本身并不难,但它可能比这个分配的预期要高级一些。我现在会在构造函数中调用它。但是,如果您有兴趣,writebettercode.org/2006/05/… 看起来像是一个不错的独立介绍。
    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-05
    • 2010-12-14
    • 1970-01-01
    • 2014-03-12
    相关资源
    最近更新 更多