看似基本的C++问题

看似基本的C++问题,c++,email,visual-c++,enums,pop3,C++,Email,Visual C++,Enums,Pop3,好吧,这让我非常恼火,我相信这是一件简单的事情。基本上,我正在和一个叫做PoCO的开源C++客户端合作,为一个类做一个电子邮件客户端…< /P> 基本上,我有一个pop3客户端对象,它从我的电子邮件服务器检索电子邮件,然后将电子邮件放入一个名为MailMessage的对象中。现在,我希望能够获取我的附件,而我唯一需要做的功能是以下功能: static const std::string & contentTransferEncodingToString( ContentTrans

好吧,这让我非常恼火,我相信这是一件简单的事情。基本上,我正在和一个叫做PoCO的开源C++客户端合作,为一个类做一个电子邮件客户端…< /P> 基本上,我有一个pop3客户端对象,它从我的电子邮件服务器检索电子邮件,然后将电子邮件放入一个名为MailMessage的对象中。现在,我希望能够获取我的附件,而我唯一需要做的功能是以下功能:

static const std::string & contentTransferEncodingToString(
    ContentTransferEncoding encoding
);
问题是,我不知道下面是什么:

内容编码

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

enum ContentTransferEncoding
    {
        ENCODING_7BIT,
        ENCODING_8BIT,
        ENCODING_QUOTED_PRINTABLE,
        ENCODING_BASE64
    };
基本上,我试图打开的附件使用7位编码。是否有人知道如何处理这些枚举,以及如何将它们传递到ContentTransferncodingToString函数中

非常感谢您的努力:

编辑:


不真实,但我没意识到 我试图访问的函数 是受保护的,不是枚举,所以 你们建议的访问方式 枚举是正确的!我猜 我试图接近他们的方式是 也是正确的,只是一个大傻瓜 错误

但是谢谢你所有的努力!!! 大社区:


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

std::string str = contentTransferEncodingToString(ENCODING_8BIT);
枚举是一种枚举。通过定义一组

const int ENCODING_7BIT = 0;
const int ENCODING_8BIT = 1;
但是,如果将8传递给函数,会发生什么?定义枚举允许

限制允许的项目数 不必担心它是如何表示的,因此有一些抽象 你可以说

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


我在谷歌上搜索了你的问题,发现:

完整的名称空间是Poco::Net::Message::ContentTransferncode,因此我假设您必须使用以下任一名称空间:


using namespace Poco::Net::Message;


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

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


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

您正在调用的函数确实是受保护的静态函数,这意味着您必须具有以下内容:


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;

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

几个答案展示了使用枚举的基本方法。尝试这些枚举时,您会收到错误消息,说明语法正确,但无法从您所在的范围访问使用这些枚举的方法

那么,答案就是进入一个你可以访问你想要的内容的范围


所讨论的方法显然是受保护的,这意味着访问它们的方式是通过派生类。我并不是说这是一个好的设计,但这显然是POCO的设计师希望您使用的。

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


但是谢谢你所有的努力!!!伟大的社区:

我有,但它肯定不起作用。我得到以下信息:“ENCODING_8BIT”:未声明的标识我尝试了你修改过的版本,但没有用。。。我得到以下信息:“Poco::Net::MailMessage::ContentTransferncodingToString”:无法将参数1从“const int”转换为“Poco::Net::MailMessage::ContentTransferncoding”。那么您没有名称空间问题吗?修改只是为了在实现端解释枚举的位置,而不是在用户端。错误消息建议您可以将枚举常量引用为Poco::Net::MailMessage::Encoding7bit。试着把它传递给函数。我鲁本,它似乎不起作用。。。第一个选项有以下错误:“Encoding8bit”:未声明的标识符,第二个选项说ContentTransferEncoding是受保护的变量。。。有趣的是,因为ContentTransferncode在源代码中是公共的……假设您使用的是VS,您可以按F12 go to declaration来查找ContentTransferncode引用的内容,它可能是一个受保护的变量。如果有2个,而您得到的是错误的,您需要通过将名称空间前缀放在前面来消除歧义。您可以做的另一件事是从MailMessage派生一个类,并在其中添加一个使用ContentTransferncode的方法[因为您可以在该上下文中访问受保护的枚举值]第二个例子不是STD C++。枚举还没有作用域。经过一点搜索之后,这些枚举似乎是在命名空间Poco中命名空间网络内的MailMessage类中声明的。所以正确的条件
on应该是:Poco::Net::MailMessage::encoding7bit。@RC:这一次,我实际测试了:P MSVC说:警告C4482:使用了非标准扩展:在限定名中使用的枚举“A”看起来这里有比这个更大的问题:DHI!实际上,我尝试过名称是Poco:Net:MailMessage而不是Message,但它不起作用,问题是contentTransferncode受到保护…我的错,Poco:Net:MailMessage。您可以粘贴整个代码和错误消息吗?根据文档,enum ContentTransferncode不受保护。受保护的成员由内部带有P的蓝色图标定义。-编辑,基于Shawnjann的最终答案。请发布实际的错误消息,并发布调用ContentTransferncodingToString方法的实际代码。您可能对此感兴趣。它几乎准备好开始测试版了,只需要再测试几次。

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

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;

}