0

好吧,所以这让我很烦,我相信这是一件简单的事情。基本上,我正在使用一个名为 POCO 的开源 C++ 客户端来为班级制作电子邮件客户端......

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

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

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

ContentTransferEncoding 编码

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

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

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

非常感谢你的努力:)

编辑:

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

不过感谢大家的努力!!!很棒的社区:)

4

7 回答 7

3

你可以说

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

或者

const std::string& s =  contentTransferEncodingToString(ContentTransferEncoding::ENCODING_7BIT)
于 2009-11-24T08:33:19.683 回答
3

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

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);
于 2009-11-24T08:57:24.393 回答
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;

}
于 2009-11-24T09:30:58.367 回答
2

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

std::string str = contentTransferEncodingToString(ENCODING_8BIT);

枚举是枚举。你可以通过定义一堆得到相同的结果

const int ENCODING_7BIT = 0;
const int ENCODING_8BIT = 1;

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

  • 限制您允许的项目数量
  • 不必担心它是如何表示的(因此有一些抽象)
于 2009-11-24T08:32:43.133 回答
2

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

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

如果这不是问题,您能否按照编译器打印的方式发布错误消息。

于 2009-11-24T09:24:58.473 回答
2

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

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

因此,答案是进入一个可以访问所需内容的范围。

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

于 2009-11-24T09:38:33.080 回答
0

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

不过感谢大家的努力!!!很棒的社区:)

于 2009-11-24T19:21:07.523 回答