Я пытаюсь реализовать простой протокол для отправки электронных писем. До сих пор я реализовал четыре команды и серверный класс, который получает все команды и проверяет, находятся ли команды в правильном порядке. Однако, когда я создаю экземпляр класса сервера, он показывает ошибку: 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
, То есть они должны быть изменены на что-то вроде:
#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
,
Вы можете инициализировать строку, как показано ниже:
SMTPServer::SMTPServer()
{
newMessage = "";
newRec = "";
newSender = "";
newData = "";
}
[/ NOEDIT]
Изменить код ниже:
void SMTPServer:: send(HELO h1);
в
void send(HELO h1);
Удалить точку с запятой после:
SMTPServer::SMTPServer()
{
newMessage = NULL;
newRec = NULL;
newSender = NULL;
newData = NULL;
};
[/ NOEDIT]