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