我有问题,希望你能帮助我。 我正在创建一个在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中编码的效果并不是很好。
答案 0 :(得分:1)
我找到了解决方案!对不起,因为我没有看到它。问题是我定义了一个公共getter来返回私有字段,如下所示:
class Downloader
{
private:
ConfigDownloader* m_config;
Logger* m_log;
MailServer *m_mailServer;
public:
MailServer *MailServer();
由于两者都被定义在同一范围内,编译器可能会对类和方法的构造函数感到困惑,因为两者都是使用相同的名称调用的。问题是我的!但每个人都应该注意这一点,因为intellisense并没有告诉你任何关于它的事情