3

我有一个问题,希望你能帮助我。我正在创建一个在 linux 上运行的 C++ 程序。我定义了两个类,其中主要的一个称为 Downloader,如下所示:

 #ifndef __DOWNLOADER_H__
 #define __DOWNLOADER_H__
 #include "configDownloader.h"
 #include "mailServer.h"
 #include <logger.h>

 using namespace ObjectModel;

 namespace Downloader
 {
     class Downloader
     {
        private:
                ...
                MailServer *m_mailServer;

        public:
                Downloader(char* configFileName);
                ...
     }; 
 }
 #endif

在此类的构造函数中,我尝试创建 MailServer 类的新实例,我将其定义到相同的命名空间中。MailServer 的代码如下所示:

#ifndef __MAILSERVER_H__
#define __MAILSERVER_H__

#include <stdio.h>
#include <list>
#include <mail.h>

using namespace std;
using namespace ObjectModel;

namespace Downloader
{
    class MailServer
    {
        private:        
            list<Mail> m_mails;
            char *m_username;
            char *m_password;

        public:
            MailServer();
            ~MailServer();

            void Open(char *username,char *password);
            bool SaveEmails(char *pathFiles);
            void Close();
    }; 
}
#endif

此类的构造函数已正确定义到 .cpp 文件中,并且一切似乎都是正确的。问题是当我尝试在 Downloader 的构造函数中创建 MailServer 的新实例时,编译器会显示“错误:预期类型”

#include <stdio.h>
#include "downloader.h"
#include <unistd.h>

namespace Downloader
{
    Downloader::Downloader(char* fileName)
    {
        this->m_config = new ConfigDownloader(fileName);
        this->m_log = new Logger("Log",LOG_LEVEL_INFO,0);
        this->m_mailServer = new MailServer();//the compiler shows the error right here
    }
 ...

有任何想法吗?我在某处读到可能是编译器太旧了,但我觉得在 makefile 中编码并不是很舒服。

4

1 回答 1

1

我找到了解决方案!我很抱歉,因为我没有看到它。问题是我定义了一个公共 getter 来返回私有字段,如下所示:

class Downloader
{
    private:
        ConfigDownloader* m_config;
        Logger* m_log;
        MailServer *m_mailServer;

    public:
        MailServer *MailServer();

由于两者都定义在同一个范围内,编译器可能会对类的构造函数和方法感到困惑,因为它们都以相同的名称调用。问题是我的!但是每个人都应该注意这一点,因为智能感知不会告诉你任何关于它的信息

于 2013-11-05T15:25:30.823 回答