<Method> не является членом <Class> - PullRequest
0 голосов
/ 04 ноября 2011

Это довольно простые вещи, которые я делал раньше, но я не понимаю, почему у меня сейчас проблема.Я создаю объект 'foo' для простого взаимодействия с действиями iostream с файлами.

Я создал почти весь проект без проблем до сегодняшнего дня, пока не добавил пару методов, которые, кажется, имеют проблемынаходится в контексте файла определения.

foo.h:

    #ifndef FOO_H
    #define FOO_H

    #include <string>
    #include <fstream>
    #include <vector>

    using std::string;
    using std::fstream;
    using std::vector;

    namespace FileSys
    {
        class foo
        {
        public:
            foo();
            /**
             * Attempts to open a file from directory dir
             * @param dir
             *              The path of the file to be opened
             */
            foo( string dir );
            /**
             * Attempts to find a directory using the parent file's path as the root directory and extending the directory by the child string
             * If child is null, the foo is replicated. Fails when parent.isDirectory() returns false.
             * @param parent
             *              The parent file to be used as the root path
             * @param child
             *              The child path to be used for extending the parent path
             */
            foo( foo &parent, string child );
            /**
             * Attempts to find a directory using the parent path as the root directory and extending the directory by the child string
             * If child is null, the foo is created with the parent path as the full path.
             * @param parent
             *              The parent path to be used as the root path
             * @param child
             *              The child path to be used for extending the parent path
             */
            foo( string parent, string child );
            /**
             * Attempts to clone reference to a previously existing foo file
             * @param file
             *              The file to be cloned
             */
            foo( foo &file );

            /**
             * Returns the working directory of this file
             */
            string getDir();

            /**
             * Writes the content supplied to the file, overwriting any existing data
             */
            bool writeTrunc( string content );

            /**
             * Writes the content supplied to the file, appending it to the end of the file
             */
            bool writeApp( string content );

            /**
             * Concatenates two files together. No implementation yet.
             */
            bool concatFiles( foo file1, foo file2 );

            /**
             * Reads from file
             *
             * @param length
             *              How many bytes will be retrieved from the file
             */
            string read( int length );

            /**
             * Reads from file
             *
             * @param length
             *              How many bytes will be retrieved from the file
             *
             * @param position
             *              Position to start reading from
             */
            string read( int length, int position );

            /**
             * Returns everything from the file
             */
            string readWholeFile();

            /**
             * Returns true if the file exists
             */
            bool exists();

            /**
             * Attempts to delete the current file
             * @return Returns true if successful and false otherwise
             *              The path of the file to be opened
             */
            bool deleteFile();

            /**
             * Returns true if this foo is a directory, rather than a file
             */
            bool isDirectory();

            /**
             * Returns the absolute path of the foo
             */
            string getAbsolutePath();

            /**
             * Returns the parent directory of this foo
             */
            foo getParentFile();

            /**
             * Creates all non-existent folders in mPath, creating the directory for this foo.
             */
            bool mkdirs();

            /**
             * Clean the file attributes
             */ 
            bool cleanFile();

            /**
             * Returns a list of all the directories and files contained within this directory 
             */
            vector<foo> list();

            /**
             * Deletes the file or directory from the file system
             */
            bool destroy();

            /**
             * Overrides the '=' operator to perform an assignment properly
             */
            foo& operator=(foo &file);

            /**
             * Overrides the '==' operator to perform an equality comparison on two foo
             */
            bool operator==(foo &file);

            /**
             * Overrides the '!=' operator to perform an inequality comparison on two foo
             */
            bool operator!=(foo &file);

            ~foo();
        protected:
        private:

            string mPath;
            fstream mFile;
            bool mExists;
            bool mIsFile;

            /**
             * Opens the file for operation
             * 
             * @param openMode
             *          The mode the file should be opened in. Use ios::openmode modes to determine the open mode.
             *
             * @return Returns true if successfully opened and false if failed
             */
            bool openFile( int openMode );

            /**
             * Indicates whether this foo is a file or a directory
             * Returns true if a file and false if a directory.
             */
            bool isFile();

            /**
             * Checks to see if the directory exists and attempts to create it if its parents exist
             *
             * @param dir
             *          The directory to be created
             *
             * @return Returns true if successful
             */
            bool mkdirs( foo dir );
    };

}

#endif // foo_H

foo.cpp:

    #include "foo.h"

    #include <string>
    #include <fstream>
    #include <vector>
    #include <errno.h>
    #ifdef HAVE_UNISTD_H
    #include <unistd.h>
    #endif /* HAVE_UNISTD_H */
    #include <sys/stat.h>

    using std::string;
    using std::fstream;
    using std::vector;

    #ifdef _WIN32
    #include <direct.h>
    using namespace std;
    #define mkdir(path,mode) _mkdir(path)
    #define getcwd _getcwd
    #endif

    #define ROOT_WORKING_DIRECTORY "SomeDir"

    namespace FileSys
    {
        ////////////////////////////////////////////
        // Ctors
        ////////////////////////////////////////////
        foo::foo()
        { /*implementation*/ }

        foo::foo( string dir )
        { /*implementation*/ }

        foo::foo( foo &file )
        { /*implementation*/ }

        foo::foo( foo &parent, string child )
        { /*implementation*/ }

        foo::foo( string parent, string child )
        { /*implementation*/ }

        ////////////////////////////////////////////
        // Public methods
        ////////////////////////////////////////////
        string foo::getDir()
        { /*implementation*/ }

        bool foo::deleteFile()
        { /*implementation*/ }

        bool foo::exists()
        { /*implementation*/ }

        bool foo::writeApp( string content )
        { /*implementation*/ }

        bool foo::writeTrunc( string content )
        { /*implementation*/ }

        string foo::read( int length )
        { /*implementation*/ }

        string foo::read( int length, int position )
        { /*implementation*/ }

        string foo::readWholeFile()
        { /*implementation*/ }

        bool foo::isDirectory()
        { /*implementation*/ }

        string foo::getAbsolutePath()
        { /*implementation*/ }

        foo foo::getParentFile()
        { /*implementation*/ }

        bool foo::mkdirs()
        { /*implementation*/ }

        foo& foo::operator=(foo &file)
        { /*implementation*/ }

        bool foo::operator==(foo &file)  //err 2039: 'operator==' is not a member of foo
        { /*implementation*/ }

        bool foo::operator!=(foo &file)  //err 2039: 'operator!=' is not a member of foo
        { /*implementation*/ }

        bool foo::cleanFile()
        { /*implementation*/ }

        vector<foo> foo::list()  //err 2039: 'list' is not a member of foo
        { /*implementation*/ }

        bool foo::destroy()  //err 2039: 'destroy' is not a member of foo
        { /*implementation*/ }

        ////////////////////////////////////////////
        // Private methods
        ////////////////////////////////////////////
        bool foo::openFile( int openMode )
        { /*implementation*/ }

        bool foo::isFile()
        { /*implementation*/ }

        bool foo::mkdirs( foo dir )
        { /*implementation*/ }

        ////////////////////////////////////////////
        // Dtors
        ////////////////////////////////////////////
        foo::~foo()
        { /*implementation*/ }

    }

Любые подсказки относительно того, что я имеюсделано для создания этой проблемы?

Редактировать: я включил реальный код только с измененной сигнатурой класса и удаленными реализациями.Я трижды проверил синтаксис, чтобы убедиться, что я не ошибся с именем класса в разрешении области действия методов, которые не работают.

Ответы [ 2 ]

6 голосов
/ 04 ноября 2011

Мы не можем знать (потому что вы не публиковали настоящий C ++), но мой хрустальный шар говорит:

У вас есть две копии "foo.h".Тот, который вы отредактировали, не тот, который находится в директиве #include.

0 голосов
/ 04 ноября 2011

Если я добавлю соответствующие операторы return в код, который вы опубликовали, он скомпилируется.

Я все еще думаю, что наиболее вероятной причиной является опечатка где-то - если вы не можете показать нам точный код, который вы 'пытаясь скомпилировать, найдите кого-то, кому вы можете показать код, и попросите его проверить его еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...