无效使用非静态成员

Alf*_*aix 1 c++ oop compiler-errors

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

#include <string>

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;
};
Run Code Online (Sandbox Code Playgroud)

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

第10行是字符串Key;

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

438*_*427 7

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

但你可以这样做:

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;
};
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)