3

私は問題を抱えています。あなたが私を助けてくれることを願っています。Linux で実行する C++ プログラムを作成しています。私は 2 つのクラスを定義しました。メインのクラスは 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
    }
 ...

何か案は?コンパイラが古すぎる可能性があることをどこかで読みましたが、メイクファイル内でのコーディングはあまり快適ではありません。

4

1 に答える 1

1

解決策を見つけました!見てなかったのですみません。問題は、次のようにプライベート フィールドを返すパブリック ゲッターを定義したことです。

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

    public:
        MailServer *MailServer();

両方が同じスコープに定義されているため、コンパイラはクラスとメソッドのコンストラクターについて混乱する可能性があります。これは、両方が同じ名前で呼び出されたためです。問題は私でした!しかし、インテリセンスはそれについて何も教えてくれないので、誰もがこれに気を配る必要があります

于 2013-11-05T15:25:30.823 に答える