看似基本的C ++问题

时间:2009-11-24 08:29:26

标签: c++ email visual-c++ enums pop3

好吧,所以这让我感到烦恼,我确信这是一件很简单的事情。基本上,我正在使用一个名为POCO的开源C ++客户端来为一个类创建一个电子邮件客户端......

基本上,我有一个pop3客户端对象,它从我的电子邮件服务器检索电子邮件,然后将电子邮件放在一个名为MailMessage的对象中。现在,我希望能够获得我的附件,而且我必须执行的唯一功能是以下功能:

static const std::string & contentTransferEncodingToString(
    ContentTransferEncoding encoding
);

问题是,我不知道以下是什么:

  

ContentTransferEncoding encoding

在深入研究源代码后,我发现它与“枚举”有关(顺便提一下这是公开的):

enum ContentTransferEncoding
    {
        ENCODING_7BIT,
        ENCODING_8BIT,
        ENCODING_QUOTED_PRINTABLE,
        ENCODING_BASE64
    };

基本上,我试图打开的附件使用7位编码。是否有人知道如何处理这些枚举,以及如何将它们传递到contentTransferEncodingToString函数?

非常感谢您的努力:)

  

编辑:

     

所以,不真实,但我没有意识到这一点   我试图访问的功能   受到保护,它不是枚举,所以   你们都建议访问的方式   枚举是正确的!我想是的   我试图访问它们的方式是   也正确= P.只是一个大傻瓜   错误。

     

但感谢您的所有努力!   伟大的社区:)

7 个答案:

答案 0 :(得分:3)

你可以说

const std::string& s =  contentTransferEncodingToString(ENCODING_7BIT)

const std::string& s =  contentTransferEncodingToString(ContentTransferEncoding::ENCODING_7BIT)

答案 1 :(得分:3)

我用Google搜索了你的问题,我发现了这个:

http://www.appinf.com/docs/poco/Poco.Net.MailMessage.html#16563

完整的命名空间是Poco :: Net :: Message :: ContentTransferEncoding所以我假设你必须使用:


using namespace Poco::Net::Message;


string &s = contentTransferEncodingToString(Poco::Net::Message::ContentTransferEncoding::ENCODING_7BIT);

答案 2 :(得分:3)

你正在调用的函数是保护的和静态的,这意味着你必须有这样的东西:


class test : public Poco::Net::MailMessage{
  pubic:
    std::string myFunc(){
       // you can you the protected function here
       return ContentTransferEncoding(ENCODING_7BIT);
       // or 
       // because you have inherited all the class
       // return CTE_7BIT;

}

答案 3 :(得分:2)

非常简单,只需使用枚举元素调用函数:

std::string str = contentTransferEncodingToString(ENCODING_8BIT);

枚举是一个枚举。您可以通过定义一堆

来获得相同的结果
const int ENCODING_7BIT = 0;
const int ENCODING_8BIT = 1;

但是,如果将8传递给函数会发生什么?定义枚举允许

  • 限制您允许的项目数
  • 不必担心它是如何表示的(因此有一些抽象)

答案 4 :(得分:2)

是否尝试调用继承自Poco :: NET :: MailMessage的contentTransferEncodingToString的类?

方法contentTransferEncodingToString不受公开保护,因此只能从继承MailMessage的类中调用。

如果这不是问题,请您完全按照编译器打印的错误信息发布。

答案 5 :(得分:2)

  

是否有人知道如何处理这些枚举,以及如何将它们传递到contentTransferEncodingToString函数?

有几个答案显示了使用enum的基本方法。在尝试它们时,您会收到语法正确的错误消息,但无法从您所在的范围访问使用这些enums的方法。

然后,答案是进入可以访问所需内容的范围。

有问题的方法显然是protected,这意味着访问它们的方法是通过派生类。我不是说这是好的设计,但显然POCO的设计师希望你使用它。

答案 6 :(得分:0)

所以,不真实,但我没有意识到我试图访问的功能受到保护,它不是枚举,所以你们所有建议访问枚举的方式都是正确的!我想我试图访问它们的方式也是正确的= P.只是一个很大的愚蠢错误。

但感谢您的所有努力!伟大的社区:)