刚开始学习一些cpp并得到了这些东西:
#includeusing 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;
那么,是否有一种方法可以实现它,以便我可以将这些变量分别用于每个对象,同时将它们用作默认参数?
据我所知,这不是直接可能的.
但你可以这样做:
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