当前位置:  开发笔记 > 编程语言 > 正文

无效使用非静态成员

如何解决《无效使用非静态成员》经验,为你挑选了1个好方法。

刚开始学习一些cpp并得到了这些东西:

#include 

using std::string;

class Vigenere{
    public:
        Vigenere(string key, string alphabet = "abcdefghijklmnopqrstuvwxyz");
        string encode(string message, string key = _key, string alphabet = _alphabet);
        string decode(string message, string key = _key, string alphabet = _alphabet);


    private:
        string _alphabet;
        string _key;
};

在尝试编译时说"10 [错误]无效使用非静态数据成员'Vigenere :: _ key'";

第10行是字符串Key;

那么,是否有一种方法可以实现它,以便我可以将这些变量分别用于每个对象,同时将它们用作默认参数?



1> 4386427..:

据我所知,这不是直接可能的.

但你可以这样做:

class Vigenere{
    public:
        Vigenere(string key, string alphabet = "abcdefghijklmnopqrstuvwxyz");
        string decode(string message, string key, string alphabet);
        string decode(string message, string key)
        {
           return decode(message, key, _alphabet);
        }
        string decode(string message)
        {
           return decode(message, _key, _alphabet);
        }

        // and same for encode


    private:
        string _alphabet;
        string _key;
};

它需要更多的源代码行,但应该为该类的用户提供相同的接口,即

someVigenere.decode("myMessage");          // Use key, alphabet from the object instance
someVigenere.decode("myMessage", "myKey"); // Use alphabet from the object instance
someVigenere.decode("myMessage", "myKey", "myAlphabet"); // Pass all

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有