无效使用非静态成员

时间:2015-12-21 20:19:24

标签: 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;
};

尝试编译时说&#34; 10 [错误]无效使用非静态数据成员&#39; Vigenere :: _ key&#39;&#34;;

第10行是 string Key;

那么,有没有办法让它能够在将每个对象作为默认参数使用时分别使用这些变量?

1 个答案:

答案 0 :(得分: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;
};

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

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