我有一个问题,我希望你能帮助我。 我正在创build一个在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
在类的构造函数中,我试图创build一个类MailServer的新实例,我将其定义到同一个Namespace中。 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的构造函数中创build一个MailServer的新实例时,编译器显示“error:expected a type “
#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。
我找到了解决方案! 我很抱歉,因为我没有看到它。 问题是,我定义了一个公共getter返回这样的私人领域:
class Downloader { private: ConfigDownloader* m_config; Logger* m_log; Mailserver *m_mailserver; public: Mailserver *Mailserver();
因为两者都被定义在相同的范围内,所以编译器可能会混淆关于类和方法的构造方法,因为两者都被调用了相同的名称。 问题是我的! 但每个人都应该关心这一点,因为智能感知不会告诉你任何事情