我正在尝试实现一种用于发送电子邮件的简单协议(protocol)。直到现在,我实现了四个命令和一个服务器类,该服务器类接收所有命令并检查命令的顺序是否正确。但是,当我创建服务器类的实例时,它显示了一个错误:未在此范围内声明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;
}
提前致谢。
最佳答案
在我看来,您已经重用了HELO.h
中SMTPServer.h
的include防护。也就是说,应将它们更改为以下内容:
#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
的内容。关于c++ - 错误: was not declared in this scope with C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20785406/