错误:未在此范围内使用C ++声明

时间:2013-12-26 13:05:27

标签: c++ compiler-errors

我正在尝试实施一个简单的协议来发送电子邮件。直到现在,我实现了四个命令和一个服务器类,它接收所有命令并检查命令是否按正确的顺序排列。但是,当我创建服务器类的实例时,它显示一个错误: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;

}

提前致谢。

2 个答案:

答案 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)

  1. 您可以按如下方式初始化字符串:

    SMTPServer::SMTPServer()
    {
        newMessage = "";
        newRec = "";
        newSender = "";
        newData = "";
    }
    

    SMTPServer::SMTPServer() { newMessage = ""; newRec = ""; newSender = ""; newData = ""; }

  2. 更改以下代码:

    void SMTPServer:: send(HELO h1);

  3. 删除分号后:

  4. void send(HELO h1);

    SMTPServer::SMTPServer()
    {
        newMessage = NULL;
        newRec = NULL;
        newSender = NULL;
        newData = NULL;
    };