在书上看到了一个新邮件检查器的例子,按着打了出来可是一直出现一个缺少存储类或类型说明符的错误!网上找了相关文章代码也和我的一模一样,实在是无法发现程序错在哪里,不知道哪位大虾能指点一下小弟,不胜感激!
下面给出所有源代码。只要先建一个C++的控制台应用程序(.net),直接把代码全部放进源文件就可以了。
不知道哪里错,急,希望各位高手帮忙发现问题!谢谢了!
在书上看到了一个新邮件检查器的例子,按着打了出来可是一直出现一个缺少存储类或类型说明符的错误!网上找了相关文章代码也和我的一模一样,实在是无法发现程序错在哪里,不知道哪位大虾能指点一下小弟,不胜感激!
下面给出所有源代码。只要先建一个C++的控制台应用程序(.net),直接把代码全部放进源文件就可以了。
不知道哪里错,急,希望各位高手帮忙发现问题!谢谢了!
#include "stdafx.h"
#using <mscorlib.dll>
#using <System.dll>
#using <System.Drawing.dll>
#using <System.Windows.Forms.dll>
using namespace System;
using namespace System::Drawing;
using namespace System::Windows::Forms;
using namespace System::Net::Sockets;
using namespace System::IO;
using namespace System::Data;
using namespace System::Text;
using namespace System::Collections;
using namespace System::ComponentModel;
public __gc class MainForm : public Form
{
private:
Label *label1; //三个标签
Label *label2;
Label *label3;
TextBox *ServerAdd; //输入框,表示服务器地址
TextBox *Username; //输入框,表示用户名
TextBox *Password; //输入框,表示用户密码
Button *btnChecker; //按钮
CPOP3Client *pPOP3Client;
void btn_Click( Object *sender, System::EventArgs *e );
int MailChecker();
public:
MainForm();
};
MainForm::MainForm()
{
StartPosition = FormStartPosition::CenterScreen; //开始运行时显示于屏幕中央
Text = "新邮件检查器";
Size = Drawing::Size( 300, 200 );
MaximizeBox = false; //让最大化按钮失效
FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;
label1 = new Label();
label1->Location = Drawing::Point( 20, 16 );
label1->Name = "label1";
label1->Size = Drawing::Size( 104, 23 );
label1->Text = "邮件服务器地址:";
label1->TextAlign = Drawing::ContentAlignment::MiddleLeft;
Controls->Add( label1 );
label2 = new Label();
label2->Location = Drawing::Point( 20, 56 );
label2->Name = "label2";
label2->Size = Drawing::Size( 104, 23 );
label2->Text = "用户名:";
label2->TextAlign = Drawing::ContentAlignment::MiddleLeft;
Controls->Add( label2 );
label3 = new Label();
label3->Location = Drawing::Point( 20, 96 );
label3->Name = "label3";
label3->Size = Drawing::Size( 104, 23 );
label3->Text = "密码:";
label3->TextAlign = Drawing::ContentAlignment::MiddleLeft;
Controls->Add( label3 );
ServerAdd = new TextBox();
ServerAdd->Location = Drawing::Point( 130, 16 );
ServerAdd->Name = "ServerAdd";
ServerAdd->Size = Drawing::Size( 136, 21 );
ServerAdd->TabIndex = 0;
ServerAdd->Text = "";
Controls->Add( ServerAdd );
Username = new TextBox();
Username->Location = Drawing::Point( 130, 55 );
Username->Name = "Username";
Username->Size = Drawing::Size( 136, 21 );
Username->TabIndex = 1;
Username->Text = "";
Controls->Add( Username );
Password = new TextBox();
Password->Location = Drawing::Point( 130, 94 );
Password->Name = "Password";
Password->PasswordChar = '*';
Password->Size = Drawing::Size( 136, 21 );
Password->TabIndex = 2;
Password->Text = "";
Controls->Add( Password );
btnChecker = new Button();
btnChecker->Location = Drawing::Point( 177, 130 );
btnChecker->Name = "btnChecker";
btnChecker->Size = Drawing::Size( 90, 25 );
btnChecker->TabIndex = 3;
btnChecker->Text = "开始检查邮箱";
btnChecker->add_Click( new EventHandler( this, &MainForm::btn_Click) );
Controls->Add( btnChecker );
}
public __gc class CPOP3Client
{
public:
//默认的构造函数
CPOP3Client():
m_Client(NULL),
m_strPOP3HostName(String::Empty),
m_strUserName(String::Empty),
m_strPassword(String::Empty),
m_strStatus(new String("OK"))
{}
//方法get_POP3HostName:获得POP3服务器地址
__property String *get_POP3HostName()
{
return m_strPOP3HostName;
}
//方法set_POP3HostName:设置POP3服务器地址
__property void set_POP3HostName(String *strPOP3HostName)
{
m_strPOP3HostName = strPOP3HostName;
}
//方法get_UserName:获得用户名
__property String *get_UserName()
{
return m_strUserName;
}
//方法 set_UserName:设置用户名
__property void set_UserName(String *strUserName)
{
m_strUserName = strUserName;
}
//方法get_Password:获得密码
__property String *get_Password()
{
return m_strPassword;
}
//方法 set_Password:设置密码
__property void set_Password(String *strPassword)
{
m_strPassword = strPassword;
}
//方法get_Status:获取状态
__property String *get_Status()
{
return m_strStatus;
}
__property int get_NumberOfMessages()
{
String *strResponse = String::Empty;
String *strNrOfMessages; //邮件数目
Char separator __gc[] = new Char __gc[1]; //托管数组
separator[0] = ' ';
try
{
if(!ConnectToServer()) //连不上服务器
return -1;
if(!SendCommand(String::Concat(S"USER ", m_strUserName),&strResponse))
{
return -1;
}
if(!SendCommand(String::Concat(S"PASS ", m_strPassword),&strResponse))
{
return -1;
}
if(!SendCommand(S"STAT ", &strResponse))
{
return -1;
}
//从回复信息中获得新邮件的数目
strNrOfMessages = strResponse->
return Convert::ToInt32(strNrOfMessages);
}
catch(Exception *e)
{
m_strStatus = String::Concat(S"Error:",e->Message);
return -1;
}
__finally
{
DisconnectFromServer();
}
}
private:
TcpClient *m_Client; //TcpClient对象
String *m_strPOP3HostName; //字符串表示服务器地址
String *m_strUserName; //字符串表示用户名字
String *m_strPassword; //字符串表示密码
String *m_strStatus; //状态
void Close()
{
if (m_Client != NULL)
{
m_Client->Close();
m_Client = NULL;
}
}
protected:
bool ConnectToServer()
{
String *strReadBuffer; //缓冲器
StreamReader *streamRead; //读字符流的StreamReader对象
//关闭已存在的连接
Close();
//和服务器建立一个连接
m_Client = new TcpClient(m_strPOP3HostName, 110);
//创建一个读取流
streamRead = new StreamReader(m_Client->GetStream(), Encoding::ASCII );
//保存到缓冲器中
strReadBuffer = streamRead->ReadLine();
//忽略buffer中的多余部分
streamRead->DiscardBufferedData();
//回复是否以+OK开头,是则成功,否则失败
if(strReadBuffer->StartsWith("+OK"))
return true;
else
{
Close();
return false;
}
}
bool SendCommand(String *strCommand, String *pstrOutput)
{
Byte outbuffer __gc[]; //声明Byte类型的托管数组
StreamReader *streamRead;
NetworkStream *streamWrite;
String *strRequest;
if (m_Client == NULL)
return false;
//给每个命令添加结束符
strRequest = String::Concat(strCommand, S"\r\n");
//创建一个从套接字读取数据的流
streamWrite = m_Client->GetStream();
streamRead = new StreamReader(streamWrite, Encoding::ASCII);
//将字符串转化为字节流将它写入套接字中
outbuffer = Encoding::ASCII->GetBytes(strRequest);
streamWrite->Write(outbuffer,0,outbuffer->Length);
//从套接字读取回复
*pstrOutput = streamRead->ReadLine();
//忽略buffer中的多余部分
streamRead->DiscardBufferedData();
return( *pstrOutput)->StartsWith(S"+OK") ? true : false;
}
void DisconnectFromServer()
{
String *strResponse = String::Empty;
SendCommand("QUIT", &strResponse);
Close();
}
};
void MainForm::btn_Click( Object *sender, System::EventArgs *e )
{
if( sender->Equals( this ->btnChecker ) )
{
if( ServerAdd->Text != " "
&& this ->Username->Text != " "
&& this ->Password->Text != " " )
{
int number = this ->MailChecker();
if( number > 0 )
{
String *info = new String( "你有" );
info->Concat(number.ToString());
info->Concat(S"封新邮件!");
MessageBox::Show( info->ToString(),"InfoBox",
MessageBoxButtons::OK,MessageBoxIcon::Information );
}
else if( number == 0 )
{
MessageBox::Show( "你暂时还没有新邮件。","InfoBox",
MessageBoxButtons::OK,MessageBoxIcon::Information );
}
}
}
}
int MainForm::MailChecker()
{
int numberOfMails;
//创建一个POP3Client对象
pPOP3Client = new CPOP3Client();
//设置各项属性
pPOP3Client->POP3HostName = this->ServerAdd->Text->ToString();
pPOP3Client->UserName = this->UserName->Text->ToString();
pPOP3Client->Password = this->Password->Text->ToString();
//获得新邮件数目
numberOfMails = pPOP3Client->NumberOfMessages;
if( numberOfMails < 0)
MessageBox::Show( "发生错误!!!请检查设置。","InfoBox",
MessageBoxButtons::OK,MessageBoxIcon::Error );
return numberOfMails;
}
int _stdcall WinMain()
{
// TODO: 请用您自己的代码替换下面的示例代码。
Application::Run(new MainForm());
return 0;
}
谁能帮我看看呀。谢谢
有人能解决吗?
在开头添加类成员的时候一直出现缺少存储类或类型说明符的错误
错误是
1:"MainForm::CPOP3Client"缺少存储类或类型说明符
2:"MainForm::pPOP3Client"缺少存储类或类型说明符
错误指针指向MianForm类的私有成员函数中