我正在尝试实施一个简单的协议来发送电子邮件。直到现在,我实现了四个命令和一个服务器类,它接收所有命令并检查命令是否按正确的顺序排列。但是,当我创建服务器类的实例时,它显示一个错误:SMTPServer未在此范围内声明。我不知道还能做什么。任何帮助表示赞赏,因为我无法解决此错误而无法完成我的程序。
SMTPServer头文件:
#include <string>
#include <iostream>
#include "HELO.h"
using namespace std;
#ifndef HELO_H_INCLUDED
#define HELO_H_INCLUDED
class SMTPServer
{
public: SMTPServer();
private: string newMessage;
private: string newRec;
private: string newSender;
private: string newData;
// overload constructor
// public: SMTPServer(string, string, string, string);
void SMTPServer:: send(HELO h1);
};
#endif // HELO_H_INCLUDED
SMTPServer cpp
#include "SMTPServer.h"
SMTPServer::SMTPServer()
{
newMessage = NULL;
newRec = NULL;
newSender = NULL;
newData = NULL;
};
void SMTPServer:: send(HELO h1)
{
}
主要课程
#include <iostream>
#include <string>
#include "SMTPServer.h"
using namespace std;
int main() {
string mes;
string rec;
string sen;
string dat;
SMTPServer test;
//cout << endl << "HELO message: " << test.send() << endl;
return 0;
}
提前致谢。
答案 0 :(得分:1)
在我看来,您已经在HELO.h
中重用了SMTPServer.h
中的包含警卫。也就是说,它们应该改为:
#ifndef SMTPSERVER_H_INCLUDED
#define SMTPSERVER_H_INCLUDED
...
#endif
如果您在两者中使用相同的包含警戒,则其中只有一个可以包含在另一个文件中。事实上,SMTPServer.h
本身包含HELO.h
,所以立即让自己的内容永远不会超过预处理阶段。
如果还不清楚,请阅读SMTPServer.h
的顶部:
#include <string>
#include <iostream>
#include "HELO.h"
using namespace std;
#ifndef HELO_H_INCLUDED
所以我们正在检查是否定义了HELO_H_INCLUDED
。由于它只包含HELO.h
,并且该文件可能定义为HELO_H_INCLUDED
,因此我们将始终说“是,它已定义!”。我们绝不会使用此#ifndef
的内容。
答案 1 :(得分:0)
您可以按如下方式初始化字符串:
SMTPServer::SMTPServer()
{
newMessage = "";
newRec = "";
newSender = "";
newData = "";
}
SMTPServer::SMTPServer()
{
newMessage = "";
newRec = "";
newSender = "";
newData = "";
}
更改以下代码:
到
void SMTPServer:: send(HELO h1);
删除分号后:
void send(HELO h1);
SMTPServer::SMTPServer()
{
newMessage = NULL;
newRec = NULL;
newSender = NULL;
newData = NULL;
};